原码,补码,反码


原码,补码,反码

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值