2.9 ビットごとの論理演算子 K&R プログラミング言語C
2009年12月20日
&
(AND)- 共に
1
の場合1
どちらか一方、または両方が0
の場合0
|
(OR)- 共に
0
の場合0
どちらか一方、または両方が1
の場合1
^
(XOR)- 共に同じ値の場合
0
異なる値の場合1
<<
(Left Shift)- 各ビットを左に指定したビット数だけ移動
右のはみ出したビットは0
になる >>
(Right Shift)- 各ビットを右に指定したビット数だけ移動
左のはみ出したビットは0
になる ~
(NOT)0
の場合1
1
の場合0
#include <stdio.h> int main(int argc, char *argv[]) { unsigned char i, j; i = 89; /* 89 => 0101 1001 */ j = 205; /* 205 => 1100 1101 */ printf("89 & 205 => %u\n", i & j); /* 73 => 0100 1001 */ printf("89 | 205 => %u\n", i | j); /* 221 => 1101 1101 */ printf("89 ^ 205 => %u\n", i ^ j); /* 148 => 1001 0100 */ printf("89 >> 1 => %u\n", i >> 1); /* 44 => 0010 1100 */ printf("89 << 1 => %u\n", i << 1); /* 178 => 1011 0010 */ printf("~89 => %u\n", ~i); /* 4294967206 => 1010 0110 */ return 0; }
実行結果
$ ./bit_test 89 & 205 => 73 89 | 205 => 221 89 ^ 205 => 148 89 >> 1 => 44 89 << 1 => 178 ~89 => 4294967206
getbits
について
#include <stdio.h> unsigned getbits(unsigned x, int p, int n); int main(int argc, char *argv[]) { int i; i = 12; printf("%u\n", getbits(i, 4, 3)); return 0; } /* getbits : p の位置から n ビットを取ってくる */ unsigned getbits(unsigned x, int p, int n) { return (x >> (p+1-n)) & ~(~0 << n); }
実行結果
$ ./getbits 3
参考:ビット演算スクリプト
プログラミング言語C 第2版 ANSI規格準拠
posted with amazlet at 09.11.27
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
共立出版
売り上げランキング: 9726