整型数据值的取值范围
int,unsigned int,short,unsigned short,long,long long 这些数据值的取值范围是怎么求的?二进制数在计算机内存储的是其补码
对于有符号数,正数的补码和本身一样,负数的补码是本身的数字位取反后加1
比如:
1=(0001)补=(0001)
-1=(1001)补=(1111)
计算机存储-1就是存储的1111
因此
当int表示范围为16位时,可以表示的最大负数为:
10000...0000(后面有15个0)
相当于-0
但这其实是-32768=110000...0000(第一位符号位,后面有15个0)的补码表示
可以理解为16位的int足可以表示-32768的补码 首先你要知道在你的系统里这些数据类型是占多少字节的,一般来说int是4Bytes,那就是2^(4*8)=2^32(1B=8b,就是一个字节是8个位的意思),又因为int是有符号位的,所以对半:-2147483648 ~ +2147483647(0算在了正的这边);unsigned int就是无符号整数:0 ~ 4294967295。
就是要搞清楚数据类型对应的字节数,参考文章:http://bbs.fishc.com/forum.php?mod=viewthread&tid=67265&extra=page%3D1%26filter%3Dtypeid%26typeid%3D584 谢谢 ba21 发表于 2017-9-14 13:02
二进制数在计算机内存储的是其补码
对于有符号数,正数的补码和本身一样,负数的补码是本身的数字位取 ...
谢谢 丶忘却的年少o 发表于 2017-9-14 13:40
首先你要知道在你的系统里这些数据类型是占多少字节的,一般来说int是4Bytes,那就是2^(4*8)=2^32(1B=8b, ...
Ccoding 发表于 2017-9-14 23:57
这个就是我说的int是有符号整形,所以要对半开呀,(2^32)/ 2 = 2^31,一般为正(包括0,所以要-1),一半为负,就变成了正整数范围:0—(2^31)-1,负整数范围:-(2^31)—0(不包括0)。 本帖最后由 Ccoding 于 2017-9-16 18:33 编辑
非常感谢 丶忘却的年少o 发表于 2017-9-15 09:38
这个就是我说的int是有符号整形,所以要对半开呀,(2^32)/ 2 = 2^31,一般为正(包括0,所以要-1),一 ...
解释得好清楚,看完秒懂 Ccoding 发表于 2017-9-16 18:33
解释得好清楚,看完秒懂
别忘记“最佳答案”哦{:10_315:} 丶忘却的年少o 发表于 2017-9-16 19:05
别忘记“最佳答案”哦
手机版本找不到最佳答案。。。 Ccoding 发表于 2017-9-16 23:16
手机版本找不到最佳答案。。。
没关系,以后可以{:10_281:} ba21 发表于 2017-9-14 13:02
二进制数在计算机内存储的是其补码
对于有符号数,正数的补码和本身一样,负数的补码是本身的数字位取 ...
感谢你的回答,我现在回来看这些答案很有收获。
页:
[1]