c中的无符号整数

时间:2011-08-06 17:37:04

标签: c

给定如下程序如何识别有符号整数是否会转到-ve或+值。

int main()
{
    int a=0xDEADBEEF;
    printf("%d",a);
    return 0;
}

-ve.But中的输出是有任何简单的方法来快速识别它而无需在visual studio中执行。

5 个答案:

答案 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]