c语言中有关负数的存储
开发环境VC6.0
下面是一段测试小程序:
int main(int argc, char* argv[])
{
short int k;
unsigned short int j;
k = 0xcdac;
printf("k = %d!\n",k);
k = -12884;
printf("k = %d!\n",k);
j = 0xcdac;
printf("j = %d!\n",k);
j = -12884;
printf("j = %d!\n",k);
return 0;
}
结果是:
k = -12884!
k = -12884!
j = 52652!
j = 52652!
(在是整数的前提条件下)
说明:对有符号型整数 k进行十六进制赋值和十进制赋值,编译器的处理是这样的,(1)十六进制值直接转换成二进制然后存储在内存中(即赋值给变量k);(2)十进制赋值时,负数转换成补码,正数则直接转换成二进制进行存储(即赋值),因为正数的补码与原码相等,所以可以理解为十进制数是以补码形式存储的。
而printf则是将内存中的二进制码按照所给的格式经过转换后才表示出来的。
对于内层中的同一段二进制码可能因为表示方式不一样而结果不一样,上面得例子可以看出:同样是0xcdac,出来的结果一个是-12884,一个是52652。
阅读(1863) | 评论(0) | 转发(0) |