C++のsigned(符号付き)とunsigned(符号なし)キーワードとは?違いと使い方を解説
C++における符号付き・符号なしデータ型の基本
C++では、すべての数値型に対して「符号付き(signed)」か「符号なし(unsigned)」かを指定できます。たとえば、int型を宣言する際に正の整数のみを扱うよう指定することも可能です。特別な指定がない場合、すべての整数型はデフォルトで符号付き(signed)として扱われます。つまり、正負どちらの値も保持できるということです。一方、unsignedキーワードを使用すると、符号を持たない変数を宣言できます。
サンプルコード
#include<iostream>
using namespace std;
int main() {
unsigned int i = -1;
int x = i;
cout << i << ", " << x;
return 0;
}
実行結果
4294967295, -1
なぜこのような出力になるのか
この出力結果には理由があります。unsigned int型の変数iに-1を代入すると、オーバーフローが発生し、ビット表現上の0がすべて1に反転します。その結果、32ビットのint型で表現できる最大値である「4294967295」が出力されます。これは変数iが符号を持たないためです。
一方、変数xは通常の符号付きint型として宣言されているため、同じ値を受け取っても正しく「-1」として解釈され、そのまま表示されます。このように、signedとunsignedでは同じビット列でも解釈がまったく異なる点に注意しましょう。
-
C++の列挙型(enum)とは?基本的な使い方をわかりやすく解説
列挙型(enumerated type、enum)とは、省略可能な型名と、その型の値として使用できる0個以上の識別子(列挙子)の集合を宣言するためのデータ型です。各列挙子は定数であり、その型は列挙型そのものになります。 列挙型が役立つ場面 変数が取りうる値があらかじめ決まっている場合、列挙型は非常に便利です。例として「性別」を考えてみましょう。性別には「男性(MALE)」「女性(FEMALE)」「その他(OTHERS)」といった限られた種類しかありません。このような場合は、enumを使って以下のように定義・利用できます。 #include<iostream> using names
-
C++の変数とは?基本の変数宣言と主なデータ型をわかりやすく解説
変数(へんすう)とは、プログラムが操作できる「名前付きの記憶領域」のことです。C++では、各変数に必ず特定の「型」が割り当てられます。この型によって、次の3つの要素が決まります。変数のメモリ上のサイズと配置そのメモリに格納できる値の範囲その変数に適用できる演算(操作)の種類最もシンプルな変数の例を見てみましょう。int my_val = 5;この例では、int型(整数型)の変数 my_val を宣言し、値として 5 を代入しています。変数の宣言方法C++で変数を定義する一般的な書式は次のとおりです。type variable_name;宣言と同時に初期化したい場合は、以下のように記述します。t