回答編集履歴

4

また修正

2021/01/07 22:14

投稿

thkana
thkana

スコア7659

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- &はビット論理演算積(and演算)の演算子です。まぁ、記号って検索するのは難しいですけど、C/C++入門書の一冊も読み通せば出てきていると思うので確認しておいてください。
19
+ &はビット論理演算積(and演算)の演算子です。まぁ、記号って検索するのは難しいですけど、C/C++入門書の一冊も読み通せば出てきていると思うので確認しておいてください。
20
20
 
21
21
  二進数で表記したとき、二つの数の各桁の両方が1になっていればその桁に1を出力、そうでなければその桁を0を出力するという働きを持ちます。そうすると、0xfとandを取るということは
22
22
 
@@ -72,7 +72,7 @@
72
72
 
73
73
  0b00110001 << 4 + 1 とすると4+1が優先的に行われて0b00100000になります。1+0b00110001<<4では先に0b00110001+1が計算されて0b00110010 << 4の演算になります。
74
74
 
75
- '10'に1を足して21を求めるイメージのときには(0b00110001 << 4 )+1としないといけません。これ、割とハマります。
75
+ '10'に1を足して11を求めるイメージのときには(0b00110001 << 4 )+1としないといけません。これ、割とハマります。
76
76
 
77
77
 
78
78
 

3

修正

2021/01/07 22:14

投稿

thkana
thkana

スコア7659

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
  0b00110001 << 4 + 1 とすると4+1が優先的に行われて0b00100000になります。1+0b00110001<<4では先に0b00110001+1が計算されて0b00110010 << 4の演算になります。
74
74
 
75
- '1'に1を足して2を求めるイメージのときには(0b00110001 << 4 )+1としないといけません。これ、割とハマります。
75
+ '10'に1を足して21を求めるイメージのときには(0b00110001 << 4 )+1としないといけません。これ、割とハマります。
76
76
 
77
77
 
78
78
 

2

さらに追記

2021/01/07 22:10

投稿

thkana
thkana

スコア7659

test CHANGED
@@ -1,6 +1,6 @@
1
1
  前提:
2
2
 
3
- シリアル入力からASCIIコード数字でYYMMDDWの順でデータが流し込まれること。
3
+ シリアル入力からASCIIコード数字でYYMMDDWの順でデータが流し込まれていること。(Serial.available()等で全てのデータが受信済みであることを確認するとか、ある一定時間内にデータが流し込まれる手順が保証されている等。Serial.read()は受信データがないと-1を返して来ますから)
4
4
 
5
5
 
6
6
 

1

ちょいと書き足し

2021/01/06 23:54

投稿

thkana
thkana

スコア7659

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
 
18
18
 
19
- &はビット論理演算積(and演算)の演算子です。まぁ、記号って検索するのは難しいですけど、入門書の一冊も読み通せば出てきていると思うので確認しておいてください。
19
+ &はビット論理演算積(and演算)の演算子です。まぁ、記号って検索するのは難しいですけど、C/C++気入門書の一冊も読み通せば出てきていると思うので確認しておいてください。
20
20
 
21
21
  二進数で表記したとき、二つの数の各桁の両方が1になっていればその桁に1を出力、そうでなければその桁を0を出力するという働きを持ちます。そうすると、0xfとandを取るということは
22
22
 
@@ -39,6 +39,8 @@
39
39
  曜日は、元データが'0'~'6'の可能性しか無いので、別に0xfとのandでもよかったのでしょうがなんとなく(?)7=0b00000111とのandをとることにしたのでしょう。'0'~'6'ではbit3が1になることはないので0xfとandをとっても0x7とandをとっても同じことになります。
40
40
 
41
41
 
42
+
43
+ このように&演算で特定のビットだけを取り出すこと(言い方を変えれば特定のビットを0にすること)を(ビット)マスクと言ったりもします。マイコンをいじる人なら覚えておくべき言葉かと思います。
42
44
 
43
45
 
44
46