式1 ビット論理演算子 式2 (論理積、論理和、排他的論理和) ビット論理演算子 式 (1の補数) |
演算子 | 意味 | 例 | 計算値(ビット毎) |
---|---|---|---|
& | 論理積 | a & b | (a と b の対応するビットが)ともに 1 なら 1、それ以外は 0 |
| | 論理和 | a | b | (a と b の対応するビットが)少なくとも一方が 1 なら 1、それ以外は 0 |
^ | 排他的論理和 | a ^ b | (a と b の対応するビットが)等しければ 1、それ以外は 0 |
~ | 1 の補数 | ~a | そのビットが 1 ならば 0、0 ならば 1 |
short dat1, dat2, ret1, ret2, ret3, ret4; /* short 型 (2 バイト) で変数を宣言 */ /* 変数に値を代入(括弧の中は 2 進数で表記したもの) */ | |
dat1 = 212; | /* dat1 = 212 (0000 0000 1101 0100) */ |
dat2 = -45; | /* dat2 = -45 (1111 1111 1101 0011) */ |
ret1 = dat1 & dat2; | /* ret1 = 208 (0000 0000 1101 0000) */ |
ret2 = dat1 | dat2; | /* ret2 = -41 (1111 1111 1101 0111) */ |
ret3 = dat1 ^ dat2; | /* ret3 = -249 (1111 1111 0000 0111) */ |
ret4 = ~ dat1; | /* ret4 = -213 (1111 1111 0010 1011) */ |
式1 シフト演算子 式2 |
演算子 | 意味 | 例 | 計算値 |
---|---|---|---|
>> | 右シフト | a >> b | a を b ビット右にシフトした値 空になったビットの値は、a の型が 符号付きデータ ( signed ) → MSB(*) の値 <算術シフト> 符号無しデータ ( unsigned ) → 0 <論理シフト> |
<< | 左シフト | a << b | a を b ビット左にシフトした値 空になったビットの値は、0 |
dat1 = 0xffff; /* dat1 にFFFFH を代入 */
dat2 = 0xffff; /* dat2 にFFFFH を代入 */
dat1 = dat1 << 4; /* 左に 4ビットシフト → dat1 = FFF0H */
dat1 = dat1 >> 4; /* 右に 4ビットシフト → dat1 = FFFFH */
dat2 = dat2 << 4; /* 左に 4ビットシフト → dat2 = FFF0H */
dat2 = dat2 >> 4; /* 右に 4ビットシフト → dat2 = 0FFFH */
識別子 複合代入演算子 式 |
演算子 | 使用例 | 同じ意味の式 |
---|---|---|
+= | n1 += n2 | n1 = n1 + n2 |
-= | n1 -= n2 | n1 = n1 - n2 |
*= | n1 *= n2 | n1 = n1 * n2 |
/= | n1 /= n2 | n1 = n1 / n2 |
%= | n1 %= n2 | n1 = n1 % n2 |
&= | n1 &= n2 | n1 = n1 & n2 |
|= | n1 |= n2 | n1 = n1 | n2 |
^= | n1 ^= n2 | n1 = n1 ^ n2 |
>>= | n1 >>= n2 | n1 = n1 >> n2 |
<<= | n1 <<= n2 | n1 = n1 << n2 |
2.演算子の優先順位と結合規則 - Priority and Combination -
優先順位 | 演算子 | 結合規則 | |
---|---|---|---|
高 ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ 低 | 1 | () [] . -> ++(後置形式) --(後置形式) | → |
2 | ++(前置形式) --(前置形式) & *(間接参照) +(プラス符号) -(マイナス符号) ! ~ sizeof | ← | |
3 | (キャスト) | ||
4 | *(乗算) / % | → | |
5 | + - | ||
6 | << >> | ||
7 | < <= > >= | ||
8 | == != | ||
9 | & | ||
10 | ^ | ||
11 | | | ||
12 | && | ||
13 | || | ||
14 | ?: | ← | |
15 | = += -= *= /= %= <<= >>= &= |= ^= | ||
16 | , | → |
int a, b, c; | /* 変数の宣言 */ |
a = 4 * 2 - 8 / 4; | /* a = (4 * 2) - (8 / 4); と同じ */ /* a = 6 */ |
b = c = 0; | /* b = (c = 0); と同じ */ /* b = 0, c = 0 */ |
表の中にはこの章では説明していない演算子ものっています。それらの演算子は後々別の章で説明します。