a & b a | b a ^ b ~a a << n a >> nのような演算子がある。上から、論理積、論理和、排他的論理和、否定、 左シフト、右シフトである。あまり使うことは無い。次の実行例で 理解して欲しい。
#include <stdio.h>
void bitprint(unsigned int a)
{
int i;
char buf[sizeof(int)*8];
for (i=0; i<sizeof(int)*8; i++) {
if ((a & 1) == 0) buf[i] = '0';
else buf[i] = '1';
a >>= 1;
}
for (i=sizeof(int)*8-1; i>=0; i--) {
printf("%c", buf[i]);
}
printf("\n");
}
main()
{
bitprint(5);
bitprint(6);
bitprint(6 & 5);
bitprint(6 | 5);
bitprint(6 ^ 5);
bitprint(~5);
bitprint(5 >> 1);
bitprint(5 >> 2);
bitprint(5 << 1);
bitprint(5 << 2);
return 0;
}
|
00000000000000000000000000000101 00000000000000000000000000000110 00000000000000000000000000000100 00000000000000000000000000000111 00000000000000000000000000000011 11111111111111111111111111111010 00000000000000000000000000000010 00000000000000000000000000000001 00000000000000000000000000001010 00000000000000000000000000010100
| a | b | a & b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
| a | b | a | b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
| a | b | a ^ b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
| a | ~ a |
|---|---|
| 0 | 1 |
| 1 | 0 |