整形数据存储及对应运算

原码、反码、补码

探讨Int范围

无符号     

根据乘法原理  共有2^32=4,294,967,296种可能  也就是0~4294967295  共4,294,967,296,因为二进制权重为2^31~2^0,所以有2^32-1计算最大的情况

  int   4byte    32位      

    

             

有符号

int   4byte    32位    1位符号位 剩下31位  二进制每个有个2种情况0和1,

则按照乘法原理  仍然共有共有2^32=4,294,967,296种可能,

只不过是0~2,147,483,647(int_max)和-2,147,483,648(int_min)~1,也就是2,147,483,648x2=4,294,967,296

int最大为 0111 1111 1111 1111 1111 1111 1111 1111

 转换为10进制为:2^31-1=2,147,483,647

 int最小为

原码 在2^31(2,147,483,648)前添上负号位

反码               1 0111  ...   1111

+1                  1  1000   ... 0000 

发现-2,147,483,648的原码和补码一样

上边是逻辑上来说,不重要,下边解释

如果按照-1  取反的步骤来说 int_min  1000 0000 0000 0000 0000 0000 0000 0000无法再-1因为符号位不可再减,所以没法算,所以直接规定为-2,147,483,648

对比参照char  的1000000 (-128)也无法-1 ,没法算直接规定为-128

发现2,147,483,647的补码+1就变成-2,147,483,648

方便讨论,把例子换成char  范围是[127,-128]

127的补码+1 ,补码就变成-128

char的范围 无符号 有符号

对于这个例子char有符号 a ,b都能存下,在参与=运算发生整型提升,再截断只剩8字节

c无法存下130,所以会出现负数,可以看作127在环中+3,所以结果为-126

printf也是一个特殊的需要整型提升的运算

 如果忘了,详见操作符详解(2)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值