首页 > 用户发贴区 > 编程问题提问区 > 整形数越界问题
2008
01-06

当一个int形数等于32767时,再加一输出就等于—32768,可是按补码32767取反加一才等于-32767吗?


是不是我理解错了,有会的朋友帮忙看一下。


整形数越界问题》有 3 条评论

  1. alex1010 说:

    我看过一本书,好像是《计算机xx概论》,是外国人编写的,汉化版,书中的第一章,详细的解答了你所问的问题,我说一下,看看你能不能明白。

  2. alex1010 说:

    对二进制进行操作的时候,因为考虑到负数,又不想真正做减法,于是引入了补码,
    最初的补码是:直接对原数取反,后来,在求数字0 的补码时,如果从正方向求解,得到它的补码是x,但是如果从负方向求解,得到它的补码是y。这样一来,0的补码,就有两个(就好像数学上,函数不连续时,在x0点的导数,有左导数,右导数一样),早期的计算机,主要用于科学上的计算,这样,如果出现0,就有问题了。

    后来,计算机的设计者,为了使0的补码只有一个,就把补码定义为:原数取反,再加1.
    并且,书中还以8-b二进制为例,讲解了这个问题,
    unsigned 0—255
    有符号时:-128—127,书中还讲解了,为什么, 127+1=-128
    我当时看懂了,现在不记得了。抱歉啊

  3. 独孤傲天 说:

    谢谢了,我现在也明白了,谢谢。

留下一个回复