云计算百科
云计算领域专业知识百科平台

再进一步(C语言 原码,反码,补码)

                                                                    前言

本文分享了 整型 在内存中的 存储,涉及到原码,反码,补码。

                                                                关于原码

整型在内存中储存时,是转化为二进制数字储存的;

原码就是十进制数字直接转化成的二进制数字转化来的;

如:10 -> 1010 -> 00000000000000000000000000001010;

      -10 -> -1010 -> 10000000000000000000000000001010;

                                                                转化解释

1.整型的大小是 4 个字节,而一个字节是 8 bit ,所以总共有 32 bit 的大小用来储存 整型 ,一个 bit 对应一个二进制位,所以会转化成一个32位的二进制数字;

2.对于有符号整型,32位的首位(最高位)是符号位,0是正数,1是负数;

3.后31位直接对应被转化数字的绝对值;

                                                                关于反码

正整数的 原反补 三码相同;

负整数的原码 的符号位不变,其他位按位取反就是 反码。

如: 00000000000000000000000000001010 -> 00000000000000000000000000001010;

        10000000000000000000000000001010 -> 11111111111111111111111111110101;

                                                                 转化解释

1.正整数的三码相同,所以不变;

2.负整数转化时,符号位不变,剩余位,1变0,0变1;

                                                                  关于补码

正整数的补码与原码相同;

负整数的补码等于反码+1;

如:00000000000000000000000000001010 -> 00000000000000000000000000001010;

       11111111111111111111111111110101 ->  11111111111111111111111111110110;

                                                                      解释

1.在内存中储存的实际是补码;

2.我们在编译器中打开内存时,看到的是补码转化为十六进制的形式;

3.每四位二进制数字转化为一位十六进制数字;

4.十六进制由 1,2,3,4,5,6,7,8,9,a,b,c,d,e,f 组成;

如:11111111111111111111111111110110 -> f f f f f f f 6

5.数字在储存时还会牵扯到 大小端字节序 的知识点(下面有说明);

6.补码直接符号位不变其余位按位取反,然后加一,依旧可以得到原码;

                                                              关于为什么要有补码

电脑的 cpu 只有加法计算器,而要实现减法,就引入了补码;

也就是,补码可以将减法转化为加法进行运算;

就像是  5 – 3  ->  5 + ( -3 );

                                                              关于大小端字节序

                                                                大端字节序存储

将数据的高位字节序内容放在低地址,低位字节序放在高地址;

                                                                小端字节序存储

将数据的低位字节序内容放在高地址,高位字节序放在低地址;

例:

假设从左往右是 从低地址到高地址;

小端字节序: -10 (f f f f f f f 6)就会储存为 ff ff ff f6;

大端字节序: -10 (f f f f f f f 6)就会储存为 f6 ff ff ff;

注:每两位十六位进制是一个字节。

                                                                      写在最后

感谢您看我的文章。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 再进一步(C语言 原码,反码,补码)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!