对于16位有符号数(也就是short)而言,十六进制数8000对应的是-32768。
按照补码的规则,0000~7fff对应的是0~32767,而ffff~8001对应的是-1~-32767,刚好剩下了8000。为了利用上这个数,就规定8000是-32768,因为它的最高位是1,应该对应一个负数。
有符号的:
0000 0000 0000 0000 = 0
1111 1111 1111 1111 = 65535
无符号的:(第一位是符号)
0 000 0000 0000 0000 = 0
1 111 1111 1111 1111 = -32767
0 111 1111 1111 1111 = 32767
1 000 0000 0000 0000 = 32768
给个参考,
我如果没记错的话应该是这样的,
如果记错的话大家骂我把(¯﹃¯)。
很整齐的打了这么多,
怎么着也要给个鼓励奖吧。
-32768是这样算的:
他在计算机里的补码形式是:1000000000000000 (这是十六位最大负数)
我们对它进行取反加1(减1取反和取反加1是一样的) 就是源码形式,
所以先取反:1111111111111111=-2^15-1
然后再加1 就是-2^15啦 也就是-32768
唉唉 我一开始也纠结了
这样说你必须懂了吧!!!!!!采纳吧
计算机中存储数据时是按补码进行存储的,这样,有符号数就会出现一个全1(16个1)的数据,人们规定,它就是-32768。按原码来解释,它是-0. 详细情况参考计算机原理中,有关原、反、补码的介绍吧。
#include
#include
short int a1=0x7fff,a2=0x8000;
printf("%d %d ",a1,a2);
下限, 绝对值最大的负数,是 0x8000。按 %d 输出;
上限,绝对值最大的正数是 0x7fff,按 %d 输出:
32767 -32768