1989年開業 情報工学部門 文部科学省登録番号 第22082号 公益社団法人日本技術士会会員 東大阪商工会議所会員
≫サンプルプログラム一覧 ≫
オープンソース/C言語サンプルプログラム 文字数型(char型)のオーバーフロー
●文字型 signed char 型 と unsigned char 型の変数に 0 から 1 を加算していき、オーバーフローする様子を表示する プログラムです。 ●符号付きでは、内部形式(16進表示)の最上位ビットを符号として認識します。 符号ビットが 1 のとき2の補数(負数)の扱いになります。 ●char 型は、一般的な処理系では 1 バイトと定義されています。 ●printf関数の変換指定子 %d によって、int型の数値に変換されて表示されます。
≫ソースファイルのダウンロード: over02.c 【問題】 ●printf関数の変換指定子を %08b(整数2進表示,前0付き8桁) にして表示してみよう。 ※負数は32桁で表示されてしまうのはなぜか考察してみよう。 ●変換指定子 %08b でも負数を正しく 8桁で表示できるよう訂正しよう 。 ●8桁の2進表示(内部形式)では、符号ありも符号なしも同じであることを確認しよう。
/****************************/ /* 文字型のオーバーフロー */ /****************************/ #include <stdio.h> void main( ) { signed char c1='\0'; unsigned char c2='\0'; int i; printf("*** signed char 型 ***\n"); for( i=0; i<=256; i++ ) { printf("%4d ",c1); c1++; } printf("\n\n*** unsigned char 型 ***\n"); for( i=0; i<=256; i++ ) { printf("%4d ",c2); c2++; } }
佐伯英子技術士事務所 〒542-0073 大阪市中央区日本橋 1-14-13 サンオフィス日本橋601 E-mail: info@saeki-pe.com