您的位置:首页 > 其它

原码,补码,反码

2015-07-18 21:31 776 查看

原码,补码,反码

bit BYTE WORD DWORD

1 BYTE = 8 bit

1 WORD = 2 BYTE

1 DWORD = 2 WORD

原码

定义:将最高位做为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值.

反码

定义:一个数如果值为正,那么反码和原码相同;一个数如果为负,那么符号位为1,其他各位与原码相反

补码

定义:正数:原码,反码补码都相同;负数:最高位为1,其余各位原码取反,最后对整个数 + 1

-7的表达方式(正数的原码,反码,补码都一样,所以下面不予讨论)

原码

1000 0000 0000 0000 0000 0000 0000 0111

反码

1111 1111 1111 1111 1111 1111 1111 1000

补码

1111 1111 1111 1111 1111 1111 1111 1001

代码验证

-7的十六进制输出,也就是补码输出

printf("%x\n", 7);


7

-7的十六进制输出,也就是补码输出

printf("%x\n", -7);


fffffff9

11111111111111111111111111111001
fffffff9
如果是补码转换原码也是补码加1,而不是减1

整数溢出

计算一个整数的时候超过整数能够容纳的最大单位后,整数会溢出,溢出的结果是高位舍弃(包括最大值溢出和最小值溢出)。

当一个小的整数赋值给大的整数,符号位不会丢失,会继承,(例:把int类型的-7赋值给long long类型的变量,这个变量还是-7,符号位会自动继承到long long类型的最高位)

无符号类型unsigned

printf("%u\n", -7);


4294967289

4294967289转化成16进制就是0xFFFFFFF9

%u就是把符号位也当做一个整数一位输出,而不当做符号位;所以unsiged类型的数最小值是0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: