c++中带符号二进制数的表示

c++中带符号二进制数的表示

一、二进制表示带符号数方法:

(1)最高位为1表示负数,最高位为0表示正数;

(2)哪一位是最高位取决于变量类型的字节数;

eg:在win32控制台应用程序中,int是32位,即是4字节的类型,当我们定义int i;那么这个i的最高位在从左数第三十一位(默认左一为第0位)。

二、原码补码反码:

(1)正数:原码补码反码是一样的;

(2)负数:负数的原码除了最高位为1,其余和正数一致,其反码除了最高位不变其余位为按位取反,补码为反码加1;

eg:对于win32平台:

22的原码为0000 0000 0000 0000 0000 0000 0001 0110

22的反码为0000 0000 0000 0000 0000 0000 0001 0110

22的补码为0000 0000 0000 0000 0000 0000 0001 0110

-22的原码为1000 0000 0000 0000 0000 0000 0001 0110

-22的反码为1111 1111 1111 1111 1111 1111 1110 1001

-22的补码为1111 1111 1111 1111 1111 1111 1110 1010

三、编程中所有数都用数的补码来表示为机器字:

(1)即22在机器中表示为0000 0000 0000 0000 0000 0000 0001 0110

(2) -22在机器中表示为1111 1111 1111 1111 1111 1111 1110 1010

四、实例:加减法带来的数据溢出问题

在这里插入图片描述
int 型数据最大值是2147483647

2147483646的二进制表示为  01111111 11111111 11111111 11111110
+6					    00000000 00000000 00000000 00000110
结果                    10000000 00000000 00000000 00000100
最高位除外,取反          11111111 11111111 11111111 11111011      (-2147483643)
补码(+1)               11111111 11111111 11111111 11111100	   (-2147483644)

得出-1073741822
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值