作业帮 > 综合 > 作业

C里int形变量占两个字节,最小值为负的2的15次方(-32768),是怎么算出来的.

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/05/16 03:22:29
C里int形变量占两个字节,最小值为负的2的15次方(-32768),是怎么算出来的.
数据在存储单元中是以补码的形式存的,那么在算范围的时候是把补码转化为十进制吗?(-32768是补码转化过来的吗),如果是的话,补码就是1000000000000000,那不是把符号位也算在内了吗?
C里int形变量占两个字节,最小值为负的2的15次方(-32768),是怎么算出来的.
你可以这样理解,当符号位是1时,补码的转换要反转各位再加1(不算符号位),所以-32768就是15个0反转成15个1,再加1,这时正好变成10000(15个0),也就是负的(这个负的是因为原来的符号位是1确定的)2^15.
再问: "所以-32768就是15个0反转成15个1" 你的意思是原码是100(15个0),但为什么原码是这个?
再答: 这个计算后的1000(15个0)你可以认为是无符号位的原码,它表示的不正是2^15方吗,它也是-32768的绝对值,32768比较特殊,因为有进位,你可以比较下-32767。
再问: 那反过来想,我要存储-32768,它的二进制是(不含符号位)1000(15个0),那接下去是把它转化为补码来储存呢,还是直接储存?如果转化为补码的话,01111(15个1)+1,结果为100(15个0),那不是没有符号位,不知道正负吗?
再答: 所以让你比较下-32767,补码怎么算的?把绝对值各位取反再加1,得到的就是补码,补码第一位叫符号位。其实-32768你也可以认为是+32768,就是32767(15个1)后面的那个数,注意,从这时候起,第一位是1了,但规定int的表示范围是[-32768~32767]的,这时第一位是1,所以正好就当成符号位吧。