给定如下程序如何识别有符号整数是否会转到-ve或+值。
int main()
{
int a=0xDEADBEEF;
printf("%d",a);
return 0;
}
-ve.But中的输出是有任何简单的方法来快速识别它而无需在visual studio中执行。
答案 0 :(得分:6)
有点魔力:
int negative = (input >> ((sizeof(int) * 8) - 1)) & 0x01;
解释一下:
在C中,负数是二进制补码,其中最高位表示符号。我们首先使用int
确定sizeof(int) * 8
在当前平台上的位数。要通过右移获得最高位,我们需要换size - 1
。由于右移是C中的算术(意味着如果最高位是1
,我们用左边的1
填充int),我们需要使用逻辑和{删除所有额外的位{1}}(或简称为0x01
,无论您喜欢什么)。
如果输入为负数,则结果为1
,其值为int
,如果为正数,则结果为1
。
如果你想在纸上做,请采取高字节(在你的情况下,0
),写出上半部分(DE
)并检查其高位是零还是之一。
答案 1 :(得分:3)
查看该值是否小于0x80,0x8000,0x80000000或0x8000000000000000,具体取决于类型的位深度。如果它小于那么它是正面的,否则它是负面的。
答案 2 :(得分:1)
如果第一位(符号位)为1,则该值为负。否则就是积极的。
BTW,与正数的数量相比,还有一个负数。答案 3 :(得分:0)
您必须知道int
中的宽度(值位数)才能确定。
您还必须在格式字符串的末尾添加\n
以确保输出。
答案 4 :(得分:0)
0xDEADBEEF
大于系统INT_MAX
上的0x7FFFFFFF
,因此转换为int
是实现定义的。常见的二进制补码实现将其定义为范围2*INT_MAX+2
中的模[INT_MIN,INT_MAX]
。