2017-01-17 7 views
0

32ビットの符号なし整数を逆にしようとしています。ゼロを1に、1を0にしたいのですが、何か問題があるようです。32ビットの符号なしintビットの数字を反転する

入力:3

出力:4294967292

予想される出力:2147483648

int main() { 

    unsigned int n; 
    scanf("%u",&n); 

    n^=4294967295; 
    printf("%u",n); 

    return 0; 
} 
+2

あなたはどのような出力を得るのですか、あなたはどのような出力を期待していますか? –

+1

"何か間違っているようです" - 正確には何ですか?あなたの入力は何ですか?実際の出力と期待される出力は何ですか? (あなたのコードが動作するかどうかを見るために、 'n'をxoringする前後にバイナリ表現を出力することができます)。 –

+6

' 2147483648(0x80000000) 'はなぜ期待しますか?正しい出力は '4294967292(0xfffffffc)'です。あなたの期待は間違っています。 –

答えて

3

あなたの期待が間違っています。

のは16進数ですべてをやってみましょう:

0x00000003^0xffffffff = 0xfffffffc 

16進数で正しい出力は、したがって、(符号なし)小数で4294967292ある0xfffffffcです。

またはバイナリで:

00000000000000000000000000000011 0x00000003 
^ 11111111111111111111111111111111 0xffffffff 
---------------------------------- ---------- 
    11111111111111111111111111111100 0xfffffffc 
関連する問題