for (int i = 7; i >= 0;i--) {
cout << ((c >> i) & 1);
これは、char、c を取り、それがバイナリーであることを出力します。ただし、これはどのように機能しますか、具体的には2行目です。
for (int i = 7; i >= 0;i--) {
cout << ((c >> i) & 1);
これは、char、c を取り、それがバイナリーであることを出力します。ただし、これはどのように機能しますか、具体的には2行目です。
位置 7 から 0 までのビット (左から右へのビット) をそれぞれ取得し、それぞれに 1 または 0 を書き込みます。& 1
は、右にシフトした後に i 番目のビットを分離するために使用されi
ます。
例:
文字 'A' が与えられた場合、同等0x41
または01000001
バイナリで:
010000001 >> 7 ==> 0 ==> & 1 ==> 0
010000001 >> 6 ==> 01 ==> & 1 ==> 1
010000001 >> 5 ==> 010 ==> & 1 ==> 0
010000001 >> 4 ==> 0100 ==> & 1 ==> 0
010000001 >> 3 ==> 01000 ==> & 1 ==> 0
010000001 >> 2 ==> 010000 ==> & 1 ==> 0
010000001 >> 1 ==> 0100000 ==> & 1 ==> 0
010000001 >> 0 ==> 01000001 ==> & 1 ==> 1
次のビットを char c から右にシフトしています。次に、1 との AND は、そのビットが設定されている場合は 1 の結果を返し、設定されていない場合は 0 を返します。