码迷,mamicode.com
首页 > 编程语言 > 详细

C语言int型数据范围

时间:2017-09-09 20:22:22      阅读:238      评论:0      收藏:0      [点我收藏+]

标签:.net   语言   表示   补码   color   编译   一点   范围   原码   

在32位及以上操作系统上,int型数据的十进制表示范围是:-231 到   231-1。
原因:因为int是带符号类型,所以最高位为符号位,于是最大表示的正数的原码(正数的原码和补码相同):01111111 11111111 11111111 11111111,也就是2的31次方减1。
再来看最小值,-2的31次方的原码表示为10000000 00000000 00000000 00000000,此时最高位的数字既代表符号(1代表是负数,0代表是正数),也代表数值。求它的补码(除符号位外按位取反,最后一位+1),所得结果为10000000 00000000 00000000 00000000。同样也是最高位既代表符号又代表数值,也就是说-2的31次方的原码和补码是相同的。
接着试试-2的31次方减1,它的原码为(假设先不考虑溢出)11111111 11111111 11111111 11111111,求反加1之后为10000000 00000000 00000000 00000001,变成了-1。所以,int的表示范围是: -231 ~   231-1

 

补充运算符(转)

int i = 1;
i = i << 2;

这是把i左移两位,左移的规则只记住一点:丢弃符号位,0补最低位!
如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。
右移有两种,算术右移(带符号)>>和逻辑右移(不带符号)>>>。
算术右移符号位不变,左边补上符号位。如: 1000 1000 >> 3 为 1111 0001
逻辑右移符号位一起移动,左边补上0。如:1000 1000 >>> 3 为 0001 0001
最后,移位的位数不能超过数据的大小,不能小于0。

转自http://blog.csdn.net/jiangyi711/article/details/5217431

C语言int型数据范围

标签:.net   语言   表示   补码   color   编译   一点   范围   原码   

原文地址:http://www.cnblogs.com/orion7/p/7499134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!