1

下面的代码用于数字的二进制表示。这段代码工作正常......但我不知道为什么 if((x&(0x80000000))>0)应该这样做<0>0 因为如果 x 的第一位是 1,则生成的数字将是 -2147483748,小于 0,但这段代码仍然有效。

#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    for(int i=0;i<32;i++) 
    {
        if((x&(0x80000000))>0)
            printf("1");
        else
            printf("0"); 
        x=x<<1;
    }
    printf("\n");
    getchar();
    getchar();
    return 0;
}
4

1 回答 1

4

十六进制常量的类型,例如0x80000000,是其值适合的以下类型中的第一个:

  • 整数
  • 无符号整数
  • 长整数
  • 无符号长整数
  • 长长整数
  • unsigned long long int

在32 位的 C 实现中int,不适合. 所以它是一个无符号整数。然后,在 中,x 从to提升到匹配。因此,表达式是无符号的,并且值大于零,而不是小于零。unsigned int0x80000000intx & 0x80000000intunsigned int

于 2013-05-13T20:37:00.963 回答