先にも書いた通り1から74HC595を使った実験です
(2/23追記) プログラムっぽいの書くとどうも勝手に校正されてしまう不具合
色々消えてしまってておかしくなってるので思い出しながら書き直しました
今回まずは2つを独立させて目視比較で色々実験です
接続に問題さえ無ければスケッチの問題のみなので回路無し
ただ単に同じ回路を2つ用意しただけ
ビットデータ読み出しは基本的にLSBFIRST(最下位から上位への順)で74HC595に入力してます
実験はArduino日本語リファレンスにもちゃんと説明の無い部分です
日本語リファレンスと違う結果が出ている場合もあります
74HC595を繋げなくてもこの実験は出来ますのでまずは自分で試してみてください
疑問1 変数の代入について
A=0b11111111とした時
B= A>>4; 4ビット右にシフトしてみる
その後Aの値はどうなっているか確認
結果 A=0b11111111のままで変化しない
Aの値を変更してBに代入される訳ではなく 代入されている値を使っているだけ
疑問2 int型は2バイト扱えるが、1バイトのbyte系に入れた場合、どの部分が拾われるのか
int A=0b0000000011111111 上位と下位の値を別にする
byte B=A 2バイト型を1バイト型に代入
結果 B=0b11111111
下位8ビットが採用される
疑問3 疑問2の結果後、上位8ビットは残っているのか?
int A=0b1111111111111111 分かりやすくする為全て1にする
byte B=A 2バイト型を1バイト型に代入
B>>4 右に4ビットシフトさせる(上位1バイトが残っていれば左4ビットは上位の1が出るはず)
結果 B=0b00001111になった 8ビット化させた段階で上位8ビットは捨てられる
疑問4 int形式(2バイトデータ)に8ビット入れた場合の上位1バイトはどうなっているか
int A= 0b01000000; Aに1バイトだけ代入
int B = A >> 4; Aを右に4ビットシフトさせてBに入れる
上位4ビットは記入していないデータが出てくる → B = 0bxxxx0100 (xが記載しなかった部分)
結果 xは全て0だった すなわち、記載しなかった部分は「0」になている
但し、日本語リファレンスでは「1」が出てくるような事が書かれていた
右シフト時に「0」を出したい場合は int B = (unsigned int)A>>4; の形式にしろと書かれています
疑問5 試しに疑問4用のBをMSBFIRST(上位ビットから読む)にして出力
shiftOut(dataPinB, clockPinB, MSBFIRST, B); 今まではLSBFIRSTで出力していた
結果 出力は当然反転する0010xxxxになる:(表記の問題で本来はLSBFIRSTが逆表示です)がやはり「0」が出てきます
まだ他にも疑問点を挙げようと思ったのですが、寝て起きたら結構忘れてて思い出せませんww
思い出したら載せたいと思っていますが、次回は本命の74HC595直列接続実験を載せたいと思っています








