私は次のように10進数を2進数に変換しようとしました:入力intと2進数intを取得しました。
int rem;
int bin[32] = {0};
for(int i=0; input != 0; i++) { //making array of binary, but reversed
rem = input%2;
bin[i] = abs(rem);
input = input / 2;
}
for(int i = 0; i < 32; i++) { //reversed binary is put in correct order
binary[i] = bin[31 - i];
}
ここで、入力が「-5」のように負の場合、2の補数が得られるようにします。
すべてのビットを「〜」で補完しようとすると、どういうわけか「-1」になります。
for (int i = 0; i < 32; i++) {
binary[i] = ~binary[i];
}
もうすぐです。
ごとint
に1ビットを格納するため、たとえば^ 1
(XOR 1)でそのビットのみを反転する必要があります。そう~
すれば、0は1になり、1は0になります。チルダ演算子はすべてのビットを反転するので、0は-1になり、1は-2になります(つまり、必要なものではありません)。
次に、2の補数を無効にするには、次のことを行う必要があります。
1
(理由)例えば:
for (int i = 0; i < 32; i++) {
binary[i] ^= 1;
}
for (int i = 31; i >= 0; i--) {
binary[i] ^= 1;
if (binary[i])
break;
}
または、2つのステップを1つに組み合わせます。
for (int i = 31, carry = 0; i >= 0; i--) {
if (carry || !binary[i]) {
binary[i] ^= 1;
carry = 1;
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加