【发布时间】:2016-07-11 09:43:46
【问题描述】:
我有一个带有简短变量声明的简单程序:
short int v=0XFFFD;
printf("v = %d\n",v);
printf("v = %o\n",v);
printf("v = %X\n",v);
结果是:
v = -3 ; v = 37777777775 ; v = FFFFFFFD
我不明白如何计算这些值。我知道短变量可以保存-32768和32767之间的值,值0XFFFD会导致溢出,但我不知道如何计算确切的值,在这种情况下为-3。
另外,如果我的声明是 v=0XFFFD 为什么输出 v=%X 是 FFFFFFFD?
【问题讨论】:
-
请阅读default argument promotions,因为
printf是一个variadic函数。 -
它不会导致溢出,只是分配在解释为有符号时恰好是负值的位模式(我认为..)二进制的恭维(表示负数的常用方法)很容易:翻转所有位并加 1。 0xff 变为 0x00 ,+1 =(负)1。
-
将
%hd用于签名short、%ho和%hx用于unsigned short。
标签: c variables integer-overflow short variable-declaration