早教吧 育儿知识 作业答案 考试题库 百科 知识分享

为什么32位机int取值范围是-2^31~2^31-1?为什么不是-2^31-1~2^31-1?假设是3位机.最大值为011(+3)最小值为111(-3).正数和负数取值范围一样啊.怎么上面不一样?

题目详情
为什么32位机int取值范围是-2^31~2^31-1?为什么不是-2^31-1~2^31-1?假设是3位机.最大值为011(+3)最小
值为111(-3).正数和负数取值范围一样啊.怎么上面不一样?
▼优质解答
答案和解析
刚才已经给你回答了这个问题,但是貌似你没明白.
3位机的话总长度是2^3,对有符号数来说各占一半,也就是2^2=4,也就是三位机的int范围为(-4~+4),但是0被划到了正数的范畴,所以三位机中int的范围应该是(-4~+3),对于你说的011是表示+3没问题,但是计算机中负数是用补码表示的,并不是像你说的111的最高位是1表示负号,然后后面的11表示3结果就是-3.那这样的话32位机上的int范围也不对了.
计算补码应该遵循这样的原则,正数的原码,反码和补码都一样,
负数的补码计算方式为:先对原码-4取绝对值,也就是4即二进制形式的100,再对这个绝对值取反(即每一位由1变0,由0变1)因此上面的100就变成了011,然后对反码进行加1操作,就得到了补码100,也就是-4的补码是11100,也就是说100表示的是-4,而不是-3