c语言long int表示范围_c语言int的范围和溢出情况的说明。

int 为整型类型,在计算机编码器下通常占4个字节(8个byte(只包括0和1)位,可以按组合想象),取值范围为-2^31——2^31-1,当输入数值大于这个范围时为溢出,溢出时按照4个字节运算,多余位数丢弃。

当输入int为2^31=2147483648;时会显示如下:

1741a750a719a047c2688b44e6e789e0.png

之所以回显是-2147483648;是因为2147483648它的 二进制表示为10...0(共31个0),第32位的1为符号位0表示正数,1为负数,而计算机采用补码的形式存储数据 ,对于负数要将数据变为源码才能看到真正的数值, 2147483648它的 二进制表示为10...0(共31个0)的符号位永远为一按照源码变反码加一为补码的方式变反码为 11...1(共32个1)再加一变为补码为其本身,10...0(共31个0)(这里符号位永远为1表示负数)后面有31个0计算出结果为2^31=2147483648,由于为负数所以其结果输出显示-2147483648;

对于int 负数的取值范围可以认为是从第32位的符号位1不变,其余31位按照组合的方式存在,共有2^31种组合,故而取值范围从-2^31开始,对于正数第32位为0其余值最大为31个一,故而最大值为2^31-1。

溢出时的表示,举个例子:

2c2fd26c458ea624331462e4b05994ba.png

由于a=4,294,967,296为2^32;而int 通常为4个字节,最多32为,而该数值为33位,二进制原码表示为10……0(32个0),第33位1溢出舍去,第32符号位为0,即为正数,原码反码补码相等,得到32个0故而结果为0;其他溢出也可以舍去多余的位数,然后运算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值