演算子
C言語の演算子
https://gyazo.com/ce2000bebd493f0b010ece7fad15f861
table:算術演算子
演算子(記号) 種別 例 意味
+ 加算 x + y xにyを加える。
- 減算 x - y xからyを引く。
* 乗算 x * y xにyをかける。
/ 除算 x / y xをyで割る。
% 剰余算 x % y xをyで割った余りを求める。
table:代入演算子
演算子(記号) 種別 例 効果
= 単純代入 a=b 代入
+= 加算代入 a+=b 加算して代入
-= 減算代入 a-=b 減算して代入
*= 乗算代入 a*=b 乗算して代入
/= 除算代入 a/=b 除算して代入
%= 剰余代入 a%=b 乗余して代入
table:論理演算子
演算子(記号) 種別 例 意味
&& 論理積(AND) a && b aとbが共に真の場合「真」
|| 論理和(OR) a || b aまたはbが真の場合「真」
! 否定(NOT) !a aが偽の場合「真」、aが真の場合「偽」
table:条件演算子
演算子(記号) 種別 例 意味
? : 条件演算子 a ? b : c aが真ならbが実行、aが偽ならcが実行。
table:比較演算子
演算子 一般的な読み 例 意味
< 小なり a < b aはbより小さい
<= 小なりイコール a <= b aはb以下
大なり a > b aはbより大きい
= 大なりイコール a >= b aはb以上
== イコール a == b aとbは等しい
!= ノットイコール a != b aとbは異なる
table:ビット演算子
演算子 種別 例 意味
& ビット毎のAND a & b aとbのビット単位のAND
| ビット毎のOR a | b aとbのビット単位のOR
^ ビット毎の排他的OR a ^ b aとbのビット単位の排他的OR
<< 左シフト a << b aをbビット分、左へシフト
> 右シフト a >> b aをbビット分、右へシフト
~ ビット単位の反転 ~a aの各ビットを反転
table:複合演算子
演算子 種別 例 意味
&= ビット単位のAND代入 a &= b aとbのビット単位のANDして代入
|= ビット単位のOR代入 a |= b aとbのビット単位のORして代入
^= ビット単位の排他OR代入 a ^=b aとbのビット単位の排他的ORして代入
<<= 左シフト代入 a<<=b 左にシフトして代入
>= 右シフト代入 a>>=b 右にシフトして代入
code:c
#define KEY_UP_ON ( 0x01 ) ///<UP キーON #define KEY_LONG ( 0x20 ) ///<キー長押し #define KEY_UP_LONG ( KEY_LONG | KEY_UP_ON ) ///<UP キー長押し検出 int main(void){
// Your code here!
int c = 0;
c= KEY_UP_LONG;
printf("c:%04x",c);
}
table:真理値表(AND)
入力 出力
A B A&B(AND) A|B(OR) A^B(XOR)
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0
https://guminote.sakura.ne.jp/wp-content/uploads/2020/12/C-MicroComputer-3-1024x337.png
https://guminote.sakura.ne.jp/wp-content/uploads/2020/12/C-MicroComputer-4-1024x343.png
https://guminote.sakura.ne.jp/wp-content/uploads/2020/12/C-MicroComputer-5-1024x331.png
~ はビットごとの反転
例:~0b1100 は 0b0011
A << B は、A の値を B ビットだけ左にシフト
例:0b10011010 << 3 は 0b11010000
A >> B は、A の値を B ビットだけ右にシフト
例:0b10011010 >> 2 は 0b00100110
複合演算子
https://gyazo.com/687ef5d3ce745a36af1d8a81e5e15d62
変数Aのnビット目を1にしたい場合どうするか。
例で考える。
A = 0b0010
n = 3 とすると。
A= 0b0110になるためには、
A と 0b0100のORを取ってやればよい。
※0b0010 | 0b0100 = 0110
式を書く。
A = A|1<< 3
これを複合演算子で書くと。
A |= 1<<3 となる。
よって
A |= 1<< n とすればよい。
同様の考え方で、
変数Aのnビット目を0にするには
A &= ~(1<<0)
にする。
変数 A の n ビット目が 1 のとき、条件を満たすという条件式
A & (1 << n)
変数 A の n ビット目が 0 のとき、条件を満たす条件式
!(A & (1 << n))
2進数:
~:ビットの反転
&:0*0→0
0*1→0
1*0→0
1*1→1
? : 条件演算子
a ? b : c aが真ならbが実行、aが偽ならcが実行
条件に++を入れた場合の動作
code:c
/* USER CODE BEGIN 2 */
//ポート名:LED_1の時の、
LED1_GPIO_Port->ODR |= GPIO_ODR_OD5; //プルアップ
HAL_Delay(2000);
LED1_GPIO_Port->ODR &= ~GPIO_ODR_OD5; //プルダウン
/* USER CODE END 2 */