だから私は今~n
私には整数nの操作をしませんが、私はこれを符号なし整数として読み取ることができる方法はありますか?Javaの符号なしIntで操作されていない
例えばの場合、私は実際に13
が欲しいときに-51
を得ます。 Javaでこれを行う方法はありますか?
たとえば、バイナリで50は110010
です。数字が反転すると001101
になるはずです。
だから私は今~n
私には整数nの操作をしませんが、私はこれを符号なし整数として読み取ることができる方法はありますか?Javaの符号なしIntで操作されていない
例えばの場合、私は実際に13
が欲しいときに-51
を得ます。 Javaでこれを行う方法はありますか?
たとえば、バイナリで50は110010
です。数字が反転すると001101
になるはずです。
先頭のゼロビットを変更しない場合は、「バイナリではない」操作後に0に設定できます。
int invert(int n) {
int mask = (Integer.highestOneBit(n) << 1) - 1;
return (~n & mask);
}
は32ビットであり、これらすべてのリース:私たちが必要なのは、我々は他のすべてのビットをゼロに設定することができます1の上位ビットの数に等しいn
中の数と11...1
マスクを作成することですゼロは1になる。
「〜50」が「13」になる方法を説明できますか?符号なし変換では、 '〜50'は' 4294967245'になります。 – Turing85
@ Turing85コメントを編集しました。混乱させて申し訳ありません。 – idude
先頭の数字を無視します。 'int'は32ビットを持ち、したがって、' 50 'の先頭のゼロはすべて '1'にも反転され、結果として' 4294967245'になります。 – Turing85