忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

C言語(avr-gcc下)のシフトの上限について

------------------------------------------------------------------------------------------------------------------

- 結論 -
C言語(avr-gcc)のシフトの上限は15まで

※他の言語, コンパイラは不明、c++やjsでは31までという記述を確認
※AVR8bitマイコンです

------------------------------------------------------------------------------------------------------------------

注、ソースはstack overflow。以前調べた際に見つけたページのリンクが見つからず…申し訳ない。

日本語サイトでこの事に触れているサイトが見つからなかったので一応ここに…
常識過ぎて書かれていないなんてことはないと信じたい。


以前とある理由でめちゃくちゃシフトしたくなることがありまして、以下の様な感じのプログラム

unsigned long hoge;
hoge |= 1<<24;

を書いたわけですが、「変数に対して値が大きすぎる」みたいな警告(エラーだったか)が出てしまいまい、実際にうまくいきませんでした。
変数の大きさはコンパイラによって変わったりするものなので、念の為にlong型の大きさを確認してみましたが4byteで問題ない。で、調べたわけですがどうやらシフト出来る大きさにも上限があるらしく、その上限がavr-gccの場合「15」だそうです。
まあそんなわけで私は実装の仕方を変えて解決したわけですが、シフト数を変数などで指定する場合はうっかり上限を超えてしまったりするのでお気をつけを。特に変数で上限を超えてしまった場合などはそのことに気が付きにくいと思うので。

拍手[0回]

PR