-1

この左シフト代入演算子への出力は -8 です。方法がわかりませんでした。助けてください!

#include < stdio.h>

int main()
{    
    int y = -1;

    y <<= 3; 
    printf("%d", y);// prints -8;

    return 0;
}   
4

2 に答える 2

2

32 ビットの 2 の補数の符号付き整数では、これらの数値の 16 進数と 2 進数の表現は次のとおりです。

-1 = 0xffffffff = 11111111 11111111 11111111 11111111
-8 = 0xfffffff8 = 11111111 11111111 11111111 11111000

その 2 番目は明らかに 3 ビットだけ左にシフトされた最初のものであり、3 つの余分な 1 が左側から「落ちて」おり、右側の 3 ビットはゼロで埋められています。

于 2015-08-01T20:42:09.627 に答える
0

有効な質問。答えは、負の値に対して異なる動作をするシフト演算子にあります。特に左シフト割り当ての場合。

これらの 2 つのリンクをたどって、疑問を解消することができます。

符号付き整数のビット演算

C のシフト演算子

お役に立てば幸いです。ありがとうございます。

于 2015-08-01T21:13:23.433 に答える