p |
q |
p&q |
p|q |
p^q |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
| 運算子 | 描述 | 結果 |
& |
Binary AND | (A&B)=12 (00001100) |
| |
Binary OR | (A|B)=61 (00111101) |
^ |
Binary XOR | (A^B)=49 (00110001) |
~ |
Binary Ones complement | (~A)=-61 (11000011) |
<< |
Binary left shift | A<<2=240 (11110000) |
>> |
Binary right shift | A>>2=15 (00001111) |
[dywang@deyu zzz]$ vim op-bw1.c
[dywang@deyu zzz]$ cat op-bw1.c
#include <stdio.h>
int main() {
unsigned int a = 60; /* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
printf("00111100 & 00001101 = %d (00001100)\n", c );
c = a | b; /* 61 = 0011 1101 */
printf("00111100 | 00001101 = %d (00111101)\n", c );
c = a ^ b; /* 49 = 0011 0001 */
printf("00111100 ^ 00001101 = %d (00110001)\n", c );
c = ~a; /*-61 = 1100 0011 */
printf("~00111100 = %d (11000011)\n", c );
c = a << 2; /* 240 = 1111 0000 */
printf("00111100 << 2 = %d (11110000)\n", c );
c = a >> 2; /* 15 = 0000 1111 */
printf("00111100 >> 2 = %d (00001111)\n", c );
}
[dywang@deyu zzz]$ gcc -o op-bw1 op-bw1.c
[dywang@deyu zzz]$ ./op-bw1 00111100 & 00001101 = 12 (00001100) 00111100 | 00001101 = 61 (00111101) 00111100 ^ 00001101 = 49 (00110001) ~00111100 = -61 (11000011) 00111100 << 2 = 240 (11110000) 00111100 >> 2 = 15 (00001111)
[dywang@deyu zzz]$ echo 'obase=2;15' | bc 1111 [dywang@deyu zzz]$ echo 'obase=2;240' | bc 11110000