在vc++6.0编译系统下,int型为32位,输出结果为:
65535,177777,ffff,65535
-2,37777777776.fffffffe,4294967294
%d,%o,%x,%u分别表示用有符号十进制、无符号八进制、无符号十六进制、无符号十进制形式输出。关于a的输出很容易理解,不说了。关于b的输出,因为-2在计算机中是以其补码的形式存储的,即32位由高到低分别是32个1和1个0,因为%o.%x,%u都是以无符号形式输出的,所以最高位符号位也作为有效的数值位,因此,32个1和1个0所表示的二进制数即无符号16进制数fffffffe,无符号8进制数37777777776,无符号10进制4294967294。
在TC编译系统下,int型为16位,输出结果为:
-1,177777,ffff,65535
-2,177776.fffe,65535
需要增加说明的是:此时,无符号数65535在内存中的存储是16位全是1,所以其无符号16进制数fffe,无符号8进制数177777,无符号10进制65535,而其以有符号数输出时则是负的15个1的补码,即-1。最高位为符号位。
%d按十进制带符号数输出,你的无符号数65535(二进制是全1)看成补码也就是-1
(前提是你的整型在内存中占两个字节,如果是4个字节,还是65535)
%u是按无符号整数输出,可以得到65535的结果
说明一点,虽然65535在内存中保存的形式和值是一样的,但是不同的解释就有不同的结果。
%o按8进制输出,%x按16进制输出,这些都将内存中的值看成无符号数。
-2在内存中(按整型16位)是1111111111111110
用补码表示的
如果看成无符号型就是65534(十进制),177776(八进制),FFFE(十六进制)
你编译运行一下不就知道了
去看看补码方面的资料吧