<目次>
(1) C++のunsigned char型とは?概要やsigned charとの違いもご紹介
(1-1) 概要
(1-2) サンプルプログラム①:疎通確認
(1) C++のunsigned char型とは?概要やsigned charとの違いもご紹介
(1-1) 概要
「unsigned char」と「signed char」はいずれも、単一の文字を格納するために使用されます(※ただし、配列で定義すれば複数文字を格納可能)。いずれもbyte型と同様に、1バイト分のメモリを確保する点は少し似ていますが、byteはバイナリデータそのもの(生のバイナリデータ)を保持するのに対して、char系は文字を保持する目的の点で用途が異なります。
・①符号付きchar
1バイトの内、先頭1ビット=符号ビット、残り7ビット=データ部で構成されます。0~255の範囲で表現が可能で、ASCII文字(0~127)+拡張ASCII(128~255)を1文字表現できます。
・②符号無しchar
1バイト=8ビット全てがデータ部で構成されます。-128~+127の範囲で表現が可能で、ASCII文字(0~127)を1文字表現できます。
(図111)
そのため、例えば文字「A」が格納されている場合は、実際は「A」に対応する値「65」を保持しています。
●初期化の方法
・①signed charの場合、変数定義時に明示的にキーワードを宣言する必要は無い
//# 65 = Aを表す
char c1 = 65;
・②unsinged charの場合、変数定義時に明示的にキーワードを宣言する必要がある
//# 65 = Aを表す
unsigned char c2 = 65;
●使い分け
もしint型の値がマイナスの値になる事を想定していない場合、unsignedにしておく事で、「0未満になる想定がない」意図を明確にする事が出来、プログラムの可読性の向上が見込めます。
また、ASCII文字(0~127)を使う場合は通常のchar(signed)で十分ですが、もし拡張ASCII(128~255)を使いたい場合や、バイナリデータ(バイト情報)を扱う場合などはunsignedにします。
(1-2) サンプルプログラム①:疎通確認
試しに「signed char」(char)と「unsigned char」にそれぞれ「65」を代入すると、文字列「A」になる事の確認です。
#include <iostream>
#include <bitset>
using namespace std;
int main(void){
char sc = 65;
bitset<8> sc_bin(sc);
cout << sc << " - " << sc_bin << endl;
unsigned char uc = 65;
bitset<8> uc_bin(uc);
cout << uc << " - " << uc_bin << endl;
}
このプログラムでは「<bitset>」標準ヘッダをインクルードして、bitset<8>で引数に与えたcharを手軽にビット列に変換する事が出来ます。
(図121)