6

数値のバイナリ表現のためにこのコードに出くわしました。利用の必要性が知りたい!! コードで。

int main() {
    int n,i;
    unsigned flag = 1<<(sizeof(int) * 8 - 1);     

    printf("Input the number\n");
    scanf("%d",&n);     
    for(i=0;i<sizeof(int)*8;i++) {    
            printf("%d",!!(n & flag) );    
            n = n << 1;
    }
    return 0;
}
4

3 に答える 3

10

!!ゼロ以外の値を 1 に変換し、ゼロ値をゼロのままにします。

x = 0;
y = 50;
!x; // 1
!y; // 0
!!x; // 0
!!y; // 1

貧乏人のブールキャストです。

于 2010-02-06T08:05:02.000 に答える
7

使用されるフラグには MSB のみが設定され、他のすべてのビットがクリアされるため、bitwise and数値を使用すると、数値の MSB をテストできます。

ビットごとの AND 処理には、次の 2 つの結果があります。

  • ゼロ - 数値の MSB が 0 であることを意味します。
  • Non-Zero - 数値の MSB が 1 であることを意味します。

次に、マッピングする方法が必要です

Non-zero -> 1
Zero -> 0

そこで二重否定を使います。

以下を使用しても同じことができます。

for(i=0;i<sizeof(int)*8;i++) {

    (n & flag) ? printf("1"):printf("0");
    n = n << 1;
}
于 2010-02-06T08:04:14.730 に答える
2

!!xのように紛らわしくないように書きx != 0ます。

于 2010-02-06T08:48:44.773 に答える