仕事メモ『2の補数』

仕事でさ、INTELHEX(インテルヘキサと読みます)ってのを理解せにゃならなくなったわけ。
INTELHEXってのは、16進数の羅列されたデータ(1文字各2バイトで構成)のことね。
具体的には、「;(セミコロン)」「レコード長」「データ長フィールド」「オフセットアドレスフィールド」「データフィールド」「チェックサム」という構成なんだけど…
まぁ、それはいいや。
 

とにかくこのINTELHEXには『チェックサム』と呼ばれるデータ領域があるのですよ。
これは上で述べた「レコード長」からデータフィールドまでの各バイトの値の合計の『2の補数』からなってる…らしい。
…簡単に言ってしまえば、「セミコロン」の次の値からラスト1バイトまでの『2の補数』の和の下2桁が、
ライト1バイト値と一致すればOKって話。
(うん、これだけでも普通はさっぱりわからんと思う。)
 

で、『2の補数』ですよ。これの意味がわからん。
しゃ〜ないので調べてみたら…『2の補数とは1の補数に1足したもの』だそうで。
って、『1の補数』ってなによ? あ〜、もうわかんねぇ〜!
 
 

と、これが先月までの俺。
で、先月末に必死こいて調べたわけですよ。
そしたらわかりました。
 

先に述べた、「セミコロン」の次の値からラスト1バイトまでの各値(16進数)を2進数に変換し、1と0をそれぞれ入れ替える。これが1の補数。
たとえば、「D(16進数)」を2進数に変換すると「1101」となる。
この『1の補数』は「0010」となるわけ。
で、これに1足したものが『2の補数』となるので、、、「0011」、これが正解。
 
 

えーっと、何が言いたいのかって〜とさ。
「これ、考えた人すげぇな〜!!!」って話。
それと、「久々に頭使うとおもしれぇぇぇ〜♪」って話。
(正直、疲れたけど…)