1

以下のコードは、数値のバイナリ表現です。if((x&(0x80000000))>0)このコードは正常に動作します.....しかし 、x の最初のビットが 1 の場合、生成される数値は -2147483748 になり、0 未満になりますが、このコードは機能します<0>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

などの 16 進定数の型は、0x80000000その値が適合するこれらの型の最初のものです。

  • 整数
  • 符号なし整数
  • 長い整数
  • unsigned long int
  • long long int
  • unsigned long long int

intunsigned intが 32 ビットの C 実装では0x80000000、 はint. したがって、これは unsigned int です。次に、 でx & 0x80000000、 x が から に昇格されintますunsigned int。したがって、式は符号なしで、値は 0 より大きく、0 未満ではありません。

于 2013-05-13T20:37:00.963 に答える