【C言語】整数値と文字値はメモリにどう格納されるのか
これまでのプログラムの中で、整数型や文字型の変数を何度も使ってきました。しかし、その値が実際にメモリ上へどのように格納されているのかを意識したことは少ないかもしれません。この記事では、C言語における整数値・文字値のメモリ上での扱いについて詳しく解説します。
文字値も実は整数として格納される
C言語では、文字値も内部的には整数として扱われます。char型は1バイト(8ビット)のサイズしか持たないため、格納できるのは通常 -128〜127 の範囲の値だけです。この範囲を超える値を代入すると、上位のビットが切り捨てられ、予想外の結果になります。
例1:char型に270を代入した場合
以下のコードでは、char型の変数に270という値を代入しています。270を2進数で表すと「100001110」となり、9ビット必要ですが、char型は右側から8ビットしか保持できません。そのため、実際に格納されるのは「00001110」、すなわち10進数の14となります。このとき、コンパイラはオーバーフロー(桁あふれ)に関する警告を出します。
例2:char型に-130を代入した場合
次に、負の数である-130をchar型の変数に格納する場合を考えてみましょう。負の数は2の補数方式で表現されます。まず130を2進数で表すと「10000010」です。各ビットを反転すると「01111101」になり、そこに1を加えると「01111110」となります。ここでも右側の8ビットだけが使われるため、最終的に格納される値は「01111110」、すなわち126です。
サンプルコード
#include <stdio.h>
int main() {
char x = 270;
char y = -130;
printf("The value of x is: %d\n", x);
printf("The value of y is: %d", y);
}
実行結果
The value of x is: 14 The value of y is: 126
まとめ
このように、char型に範囲外の値を代入すると、下位8ビットだけが残り、残りのビットは切り捨てられます。負の数の場合は2の補数表現が適用される点にも注意しましょう。変数のサイズと格納できる値の範囲を理解しておくことは、意図しないバグを防ぐために非常に重要です。
-
【JavaScript】localStorageに値を設定・取得する方法をわかりやすく解説
JavaScriptのWeb Storage APIのひとつであるlocalStorageを使うと、ブラウザにデータを永続的に保存できます。ページを再読み込みしても値が消えないため、ユーザー設定や入力内容の一時保存などに便利です。 値を保存するには localStorage.setItem(キー名, 保存する値) を使用し、保存した値を取り出すには localStorage.getItem(キー名) を使用します。 サンプルコード 以下は、テキストボックスに入力された値が変更されるたびに、その値をlocalStorageへ自動的に保存するコード例です。 <!DOCTYPE html>
-
【解決済み】Photoshop CC 2018/2017の「An integer between 96 and 8 is required」エラーを修正する方法
Photoshop CC 2018/2017の環境設定で「An integer between 96 and 8 is required. Closest value inserted(96~8の整数が必要です。最も近い値を挿入しました)」というエラーは、RAMが2GB未満のWindows 10マシンでよく発生します。このエラーは、Windows 10をアップデートした後に、パフォーマンス環境設定(編集 > 環境設定 > パフォーマンス)を開こうとしたタイミングで表示されます。 このチュートリアルでは、Windows 10上のPhotoshop CC 2018および2017で発生