<目次>
(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)