unsigned short sx = -1;
-1是有符号数,unsigned short声明的变量是无符号的,怎么理解?
字面常量-1有符号数,这里的数是指十进制数,以补码的编码形式存储在字节单元中,-1的补码为0xffff。在执行阶段,从常量区拷贝到栈的对应变量单元中,因此栈中变量sx的所在字节单元的内容为0xffff。
unsigned short 指明变量 sx 为无符号数,这里的数是指二进制数。它的作用是表明计算机在面对二进制串的时候,认为是一串二进制原码。
所以,计算机理解“0xffff”为原码,转换为十进制为=65535.
printf("%d",sx);
打印出来的值即为65535.
无符号数与有符号数
人为指定地某个二进制串有无符号。若该二进制串是有符号的,在计算机中它是补码;若该二进制串是无符号的,在计算机中它是原码。
对于同一串二进制“1101”
若人为指定“1101”为无符号数:在计算机中“1101”转化为十进制数为13.
若人为指定“1101”为有符号数:在计算机中“1101”转化为十进制数为-3.
由于补码的可表示范围有正负数,而原码只能表示非负数,所以,站在人的角度(十进制),可以这样理解无符号数与有符号数:
负整数是有符号的,因为通过补码表示;非负整数可认为是有或无符号,因为非负整数原码与补码相同。
本文解析了无符号短整型变量如何存储-1这一有符号数值,并解释了其在计算机内部的表示方式,以及如何被解释为65535这个无符号数值。
798

被折叠的 条评论
为什么被折叠?



