是这样的 你定义的 0xffff 不是补码 是你要存的负数-32767
因为是负数所以在内存中以补码方式存放
所以0xffff 转成补码
取反码 0x8000
补码再加1 =0x8001 -1
补码是数据存储在内存中的格式,不是你写的格式。所有数据在计算机中都是以补码的形式存储的。
在计算的内存中的数据:都是以补码的形式存储,但是和你的定义无关,他会将你现在的数据转换成补码进行存储
区分两个概念:数在内存中的存储形式及数在屏幕上的显示形式。
0xffff是-1在内存中的存储形式,是-1的补码;-1是数在屏幕上的显示形式。
short int a=0xffff; //将十六进制0xffff赋给变量a。
printf("%d",a); //这儿将输出-1,因为0xffff以%d格式输出时,被认为是数的补码,对应的数为-1。