ビット単位で演算を行う演算子として次の4つがある。
& | ビットごとの AND |
| | ビットごとの OR |
^ | ビットごとの XOR(排他的論理和) |
~ | 1 の補数 |
1 の補数というのは、ビットの 0 と 1 を反転させる単項演算子だ。次のプログラムで、その動作を確認することができる。
#include
void print_binary(char ch);
int main(void)
{
char ch;
ch = 'a';
print_binary(ch);
ch = ~ch;
print_binary(ch);
return 0;
}
void print_binary(char ch)
{
int i;
for (i = 128; i > 0; i = i / 2) {
if (i & ch) {
printf("1");
} else {
printf("0");
}
}
printf("\n");
}
#include
void print_binary(char ch);
int main(void)
{
char ch;
ch = 'a';
print_binary(ch);
ch = ~ch;
print_binary(ch);
return 0;
}
void print_binary(char ch)
{
int i;
for (i = 128; i > 0; i = i / 2) {
if (i & ch) {
printf("1");
} else {
printf("0");
}
}
printf("\n");
}
#include void print_binary(char ch); int main(void) { char ch; ch = 'a'; print_binary(ch); ch = ~ch; print_binary(ch); return 0; } void print_binary(char ch) { int i; for (i = 128; i > 0; i = i / 2) { if (i & ch) { printf("1"); } else { printf("0"); } } printf("\n"); }
takatoh@nightschool $ ./sample_11_5 01100001 10011110
ちゃんと各ビットが反転してるね。