Rev*_*ick 0 c variables integer-overflow short variable-declaration
我有一个带有简短变量声明的简单程序:
short int v=0XFFFD;
printf("v = %d\n",v);
printf("v = %o\n",v);
printf("v = %X\n",v);
Run Code Online (Sandbox Code Playgroud)
结果是:
v = -3 ; v = 37777777775 ; v = FFFFFFFD
Run Code Online (Sandbox Code Playgroud)
我不明白如何计算这些值。我知道一个短变量可以保存 -32768 和 32767 之间的值,而值 0XFFFD 会导致溢出,但我不知道如何计算确切值,在这种情况下为 -3。
另外,如果我的声明是 v=0XFFFD 为什么输出 v=%X 是 FFFFFFFD?
首先, ashort可以短至 16 位(您的编译器可能就是这种情况)。这意味着65533不能正确表示,赋值溢出,它换行-3(作为short int有符号短整数)。但你已经知道了。
其次,当作为参数发送printf所述short int被转换到int自动,而是作为v包含-3就是这样被发送到的值printf。
第三,%o和%X转换期望的unsigned int不是您所提供的。这意味着未定义的行为(理论上),但实际上它是可以预测的。这意味着 for 的位模式-3被解释为一个无符号整数,而在 32 位机器上恰好是0xFFFFFFFD.
| 归档时间: |
|
| 查看次数: |
1215 次 |
| 最近记录: |