符号扩展是指计算机对于小字节转换成大字节的规则。
比如char(1字节)转换成int(4字节),多出来的3个字节到底填充什么?
规则如下:
当扩展一个负数的时候需要将扩展的高位全赋为1.对于正数而言,符号扩展和零扩展是一样的,因为符号位就是0,即全填充0。
上面那句话的本意是指:
负数扩展后,还是负数,且值不变;正数扩展后还是正数,值不变。
看似简单的一句话,可常在面试中让人困惑不已
C语言例子:
int main()
{
char a = -1;
unsigned char b = a;
int n = (int)a;
printf("%d \n", n); //程序输出-1
n = (int)b;
printf("%d \n", n); //程序输出255
}
解释 :把a赋值给b的时候,b成了255,因为b没有符号位。