int main()
{
int a=1,b;
b=~1;
printf(""%d",b);
return 0;
}
plsは、理解するのに役立つビット単位の操作を示すことによって説明します...
前もって感謝します.......
int main()
{
int a=1,b;
b=~1;
printf(""%d",b);
return 0;
}
plsは、理解するのに役立つビット単位の操作を示すことによって説明します...
前もって感謝します.......
それはまさにあなたが想像できるものです。 1
は00000001
2 進数です (桁数はint
プラットフォームのサイズによって異なります)。 ~1
ビット単位の反転を実行し111111110
ます。2の補数(バイナリ演算の最も一般的なシステム) では、これは に等しくなり-2
ます。
この ID は、次の動作を思い出すのに役立ちます~
。
~x == -x - 1
1に適用する:
~1 == -1 - 1
== -2
ビット単位:
1 == ...0000000001
~1 == ...1111111110 # flip the bits
0 == ...0000000000
-1 == ...1111111111 # two's complement representation for negative numbers
-2 == ...1111111110
何が起こっているかは次のとおりです。
1: 00000001
~1: 11111110
符号付き整数で考えてみると、 0: 00000000 -1 -1: 11111111 -2: 11111110
基本的に、ゼロから始めて 2 を引いて、何が得られるかを確認します。