怪我咯2017-04-17 14:29:46
ここでのデフォルトの 1
は int なので、 类型。而你的编译环境下,
int` は 32 ビットです。
この 1
のバイナリ表現は
32 ビット左シフト後
リーリーint
タイプなので署名されています。したがって、最初のビットは符号ビットであり、負の数になります。なぜint
の最小値なのかというと、補数で表現されているからです。
最大値を超える必要がある場合は、次の方法を使用してください
リーリー-1
のバイナリ表現は 0xffffffff
であるためです。 unsigned 型に変換してからシフトすると、符号ビットの影響はありません。
PHP中文网2017-04-17 14:29:46
32 ビット int の場合、31 ビットを左にシフトすると最上位ビットに到達します。
符号付き数値の場合、最上位ビットは符号ビットであり、0 は正、1 は負であるため、それが最小値になります。具体的な理由は、int がどのように保存されているかを見てください
阿神2017-04-17 14:29:46
(1 << 31) - 1 : signed int の最大値
(1 << 31) 1 : signed int の最小値
((unsigned int)1<<32)-1: unsigned int の最大値
0: unsigned int の最小値