作业帮 > 综合 > 作业

为什么c语言中16位二进制数表示的最小值是-32768?就算都写成1(即1111 1111 1111 1111)也是-3

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/27 23:26:57
为什么c语言中16位二进制数表示的最小值是-32768?就算都写成1(即1111 1111 1111 1111)也是-32767才对?
那这个是什么?
1000 0000 0000 0000
再问: 恩对的这个书上是说-32768,可是我不明白这明明是-0才对???
再答: 你的想法是对的,但是忽略了一个事实:计算机中用补码来表示数。你这个表示应该算原码吧? 清华的《IBM-PC 汇编语言程序设计》在1.3节中提到: [-0]补 = 2 ^ 8 = 0000000。所以在补码表示法中,0只有一种表示,就是0000000。多出的这个表示(即1000 0000),就被定义成(注意:这是定义)-128。 同理这个原则也适用于上例。
再问: 对不起啊,还是有点问题,首先1000 0000 0000 0000是原码,变成补码应该是1 0000 0000 0000 0000吗?这对于16位的二进制数已经溢出了吧?那么这个数据怎么在计算机内部存储下来的?而且在输出的时候怎么输出的-32768,能不能把具体的计算机内补码变源码的过程告诉我?谢谢呀,我这个问题想问好久了。
再答: 计算机本身就是按补码方式来设计硬件的,这方面的知识你可以参考一些像数电、微电子这方面的书。具体地说下去真正的专家要笑掉大牙了。。。