unsigned int

説明

Unoやその他のATMEGAベースのボードでは、unsigned int(unsigned integers)は2バイトの値を格納する点ではintと同じです。しかし、負の数を格納する代わりに正の値のみを格納し、0~65,535((2^16)-1)の有用な範囲が得られます。

一方、Dueは4バイト(32ビット)の値を格納し、0~4,294,967,295(2^32 – 1)の範囲になります。

符号なし整数と(符号付き)整数の違いは、最上位ビット(「符号」ビットと呼ばれることもある)の解釈方法にあります。Arduinoのint型(符号付き)では、上位ビットが「1」の場合、数値は負の数として解釈され、他の15ビットは(2の補数)で解釈されます。

構文

unsigned int var = val;

パラメータ

var: 変数名。
val: その変数に割り当てる値。

コード例

注意点と警告

符号なし変数が最大容量を超えた場合、「ロールオーバー」して0に戻ったり、逆に0に戻ったりします。

unsigned intを使った演算は、unsigned intがロールオーバーしない場合でも、予期しない結果になることがあります。

MCUは以下のルールを適用しています。

計算は出力先の変数のスコープ内で行われます。例えば、出力先の変数が符号付きであれば、両方の入力変数が符号なしであっても、符号付きの計算を行います。

しかし、中間結果を必要とする計算では、中間結果のスコープはコードによって指定されていません。この場合、MCUは中間結果を符号なしで計算します。なぜなら、両方の入力が符号なしだからです

なぜ、unsigned int(符号なし変数)を使うのか?

カウンタなどでロールオーバーの動作が必要な場合

符号付き変数では少し小さすぎるが、long/floatのメモリと速度の損失を避けたい。

タイトルとURLをコピーしました