赞
踩
定义:
符号扩充(又名符号扩展)是计算机算术中,在保留数字的符号(正负性)及数值的情况下,增加二进制数字位数的操作。
举个例子,若计算机使用六位二进制数表示数字“00 1010”(十进制的正10),且此数字需要将字长符号扩充至十六位,则扩充后的值为“0000 0000 0000 1010”。此时,数值与符号均保留了下来。
若计算机使用十位数及二补数表示数字“11 1111 0001”(十进制的负15),且此值需要扩充至十六位,则扩充后的值为“1111 1111 1111 0001”。 此时,负号及原数字数值通过将左侧填充为1的方式保留了下来。
零扩展是与符号扩展类似的概念。在移动操作或转换操作中,零扩展指的是将目标的高位数设置为零,而不是将高位数设置成原数字的最高有效位。
即都补零。
何时使用零扩展,何时使用符号扩展:
当窄数据类型为:有符号数据类型时,扩展为宽数据类型时,使用符号扩展。
当窄数据类型为:无符号数据类型时,扩展为宽数据类型时,使用零扩展。
例如:
#include<stdio.h> int main() { unsigned short abc=2; abc=abc-5; printf("%d\n",abc);//输出 65533 printf("%u\n",abc); //输出 65533 printf("%x\n",abc); //输出 fffd unsigned int ab = 2; ab = ab - 5; printf("%d\n",ab); //输出 -3 printf("%u\n",ab);// 输出 4294967293 printf("%x\n",ab); //输出 fffffffd return 0; }
unsigned short 做零扩展,所以 -3零扩展后的补码十六进制为 0000fffd,此时按%d有符号和%u无符号输出时,都一样,都是 65533。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。