JavaScript のビット単位の演算に関する関連情報を勉強していますが、ビット単位の反転演算がまったく理解できません。ビット単位の反転演算が最大値 (現在の値) ではなく ~8=-9 である理由がわかりません。 ~-8=7?
~8 は、コンピューターでの -9 の表現方法とまったく同じだからです。 。 。 。 32 ビット符号なし整数は、0 ~ 2^32-1 の正の整数範囲を表すことができ、2^32 整数を表すことができます。 0 ~ 2^32-1的正整数范围,这样可以表示2^32个整数。当作为有符号数的时候,不是把最高的比特位作为符号位,即 -1 不是直接把000..001 的最高bit置为 1 ,而是使用其 -1 + 2^32 = 2^32-1 对应的二进制数表示。这种形式叫做补码。一种最快的求负数补码的方式是,其绝对值的二进制,从低位开始,遇到的第一个 1 之前(包括这个1)不变,其他的 1 变 0, 0 变 1。 比如 -4 的补码是, 4 -> 00...0100 -> 11...1100符号付き数値として使用する場合、最上位ビットを符号ビットとして使用する代わりに、つまり -1 を直接設定するのではなく、000..001 の最上位ビットを設定します。 > を 1 に変更する代わりに、対応する 2 進数表現 -1 + 2^32 = 2^32-1 を使用します。この形式は 2 の補数と呼ばれます。負の数の補数を見つける最も速い方法の 1 つは、その絶対値の 2 進数を下位ビットから使用し、最初に見つかった 1 (この 1 を含む) が変化せず、他の 1 が 0 になり、0 になるまで使用することです。 1になります。 たとえば、-4 の補数は 4 -> 00...0100 -> 11...1100 です。
0 ~ 2^32-1
2^32
0 ~ 2^32-1
-1
000..001
-1 + 2^32
2^32-1
00...0100
11...1100
マークがあります。 -5 + 4 = -1 二进制表示是 1011 + 0100 = 1111,而无符号的11+4=15二进制形式也是1011 + 0100 = 1111 。如果用1101 表示-5那么有符号加法就是1101 + 0100 = 1111
-5 + 4 = -1
1011 + 0100 = 1111
11+4=15
1101
-5
1101 + 0100 = 1111
さらに、JS ビット演算子の戻り値は符号付き 32 ビット整数です。 最大的值-当前的值 这是对于无符号整数来说的。 只是除了>>> リーリー
最大的值-当前的值
>>>
逆?ビット単位の NOT では、ビット単位の NOT を実行した結果、値の補数が返されます。
ここでのビットごとの否定は実際のビットごとの否定ではなく、补码运算だからです。
补码运算
詳細については、この質問を参照してください: js でビット単位の否定を理解するにはどうすればよいですか?
反転演算では符号ビットも反転します。詳細については、「JavaScript 高度なプログラミング」3.5.2 ビット演算を参照してください。
リーリー
~8 は、コンピューターでの -9 の表現方法とまったく同じだからです。 。 。 。
これの利点は、加算と減算に関して、コンピュータが署名されているかどうかを区別する必要がないことです。たとえば、4 ビット シェーピングです。 人にとっても不便ですが、コンピュータにとっても不便な32 ビット符号なし整数は、
0 ~ 2^32-1
の正の整数範囲を表すことができ、2^32
整数を表すことができます。0 ~ 2^32-1
的正整数范围,这样可以表示2^32
个整数。当作为有符号数的时候,不是把最高的比特位作为符号位,即
-1
不是直接把000..001
的最高bit置为 1 ,而是使用其-1 + 2^32
=2^32-1
对应的二进制数表示。这种形式叫做补码。一种最快的求负数补码的方式是,其绝对值的二进制,从低位开始,遇到的第一个 1 之前(包括这个1)不变,其他的 1 变 0, 0 变 1。 比如 -4 的补码是, 4 ->00...0100
->11...1100
符号付き数値として使用する場合、最上位ビットを符号ビットとして使用する代わりに、つまり-1
を直接設定するのではなく、000..001
の最上位ビットを設定します。 > を 1 に変更する代わりに、対応する 2 進数表現-1 + 2^32
=2^32-1
を使用します。この形式は 2 の補数と呼ばれます。負の数の補数を見つける最も速い方法の 1 つは、その絶対値の 2 進数を下位ビットから使用し、最初に見つかった 1 (この 1 を含む) が変化せず、他の 1 が 0 になり、0 になるまで使用することです。 1になります。 たとえば、-4 の補数は 4 ->00...0100
->11...1100
です。マークがあります。
その通りです。その逆は-5 + 4 = -1
二进制表示是1011 + 0100 = 1111
,而无符号的11+4=15
二进制形式也是1011 + 0100 = 1111
。如果用1101
表示-5
那么有符号加法就是1101 + 0100 = 1111
さらに、JS ビット演算子の戻り値は符号付き 32 ビット整数です。
最大的值-当前的值
这是对于无符号整数来说的。 只是除了>>>
リーリー逆?ビット単位の NOT では、ビット単位の NOT を実行した結果、値の補数が返されます。
ここでのビットごとの否定は実際のビットごとの否定ではなく、
补码运算
だからです。詳細については、この質問を参照してください: js でビット単位の否定を理解するにはどうすればよいですか?
反転演算では符号ビットも反転します。詳細については、「JavaScript 高度なプログラミング」3.5.2 ビット演算を参照してください。
リーリー