知識ポイント 1: 整数データ型
整数データ型 | デフォルトのタイプ | 名前 |
[署名付き]int | 整数 | 整数 |
符号なし整数 | 符号なし整数 | 符号なし整数 |
[署名付き]short[int] | 短い | 短い |
unsigned short[int] | 符号なしショート | 符号なしショート |
[署名付き]long[int] | 長さ | 長整数 |
符号なしlong[int] | 符号なしロング | 符号なし長整数 |
上記のカテゴリの式は、正および負の整数を表すことができる符号付き整数であり、符号なし整数は正の整数のみを表すことができます。たとえば、 unsigned int の値の範囲は0 ~ 2*32-1です。
知識ポイント 2: 整数定数
C 言語では、整数定数は次の 3 つの形式で表現されます。
1) 10 進整数 (1024 など) は 0 ~ 9 で構成されます。
2) 0 から始まる 8 進整数 ( 0 ~ 123 など) は0 ~ 7 で構成され、10 進数の 83 に等しくなります。
3) 0x 12E2 など、0x で始まる 0 ~ 9、A ~ F からなる 16 進整数。
知識ポイント 3: 整数変数
C 言語では、整変数に対してメモリ内に一定の長さの記憶単位が割り当てられ、記憶単位のビットは 0 または 1 のみを受け入れるため、この整数変数のデータはバイナリ形式で記憶されます。
ここで、1 つの記憶単位は 1 バイトに相当し、1 バイトは 8 ビットに相当します。
00000000 =0、00000001 =1、00000010 =2...... 11111111 =255
知識ポイント 4: 整数データの保存
C言語では数値は2の補数で表現されますが、これには正の整数の補数と負の整数の補数が含まれますが、符号なし短整数は負の数を表すことができず、C言語では元のコードは次の形式で表現されます。
元のコード; 000000000000000 =0 111111111111111 =2*16-1、つまり 0~65535。
補数コード: 0 =+0~+32767 (2*15-1) 32768 個の正の数。
1 =-1~-32768 (-2*15) 32768 個の負の数。
a: 正の整数の補数は、数値の 2 進形式です。つまり、補数 = 元のコードです。
クレジット番号が 2 つのストレージ ユニットを占有する場合、10 の補数を求めます。
1) 10 の 2 進数形式は 1010 です。
2) 10 の補数 = 1010 (最初の 12 個のゼロは通常省略されます)。
b: 負の整数の補数。
1) データの絶対値はバイナリ形式で表現されます。
2) 最上位の符号ビットは 1 で、負の数を意味します (0 は整数を意味します)。
3) 符号ビットを除いた値を反転して 1 を加算します。
例: -5 の補数を求めます。
1) 5 のバイナリ コード = 101、5 の元のコードは 0000000000000101 です。
2) 負の数なので、最大符号は 1 なので、1000000000000101 になります。
3) ビット単位の反転は 111111111111010 です。
4) 1 を追加すると、1111111111111011 が得られます。
知識ポイント 5: メモリ内の整数データのサイズ
C 標準では、さまざまなタイプのデータが占めるストレージ ユニットの長さは指定されていません。sizeof(short)<=sizeof(int)<=sizeof(long) のみが必要です。具体的な要件は各コンパイル システムによって決定されます。
sizeof は、型または変数の長さを測定する演算子です。次のコードのように、sizeof() 関数を使用して、計算でデータに割り当てるバイト数を決定できます。
#include<stdio.h>
int main()
{
printf("%d,sizeof(int));
printf("%d,sizeof(short));
printf("%d,sizeof(long));
return 0;
}
知識ポイント 6: 整数変数の定義
C 言語は、最初に必須の型定義に厳密に従い、それから使用します。型区切り文字を使用して、整数型の変数を定義できます。定義方法は次のとおりです。
[型定義子] 識別子 ( int num など) 。
整数データを格納するためにメモリ内で 4 バイトのスペースが使用され、このスペースはnumという名前で識別されます。
知識ポイント 7: 整数データのオーバーフロー
1) signed または unsigned 修飾子を使用して追加できるのは整数 (文字を含む) データのみですが、実数型データは追加できません。
2) 符号なし整数データを出力するには、「%u」形式を使用します。%u は、符号なし 10 進数形式での出力を意味します。のように:
unsigned short price=50; //定义price为无符号短整型变量
printf("%u\n",price); //指定用无符号十进制数的格式输出
3) 符号付きデータの場合、表現できるデータの範囲が決まっているため、「足し算」などの操作を続けると境界を超えてしまう(C言語ではデータオーバーフローと呼んでいます)。データ オーバーフローは発生しませんが、エラーは報告されますが、期待した結果は得られません。次に例を示します。
#include<stdio.h>
int main()
{
int i=32767;
printf("%d",i+1);
return 0;
}
結果: 32767 ではなく -32768
4) 符号なし整数として定義された変数を指定した後は、それに負の値を代入しないでください。そうしないと、次のような間違った結果が得られます。
unsigned short price=-1; \\不能吧一个负整数存储在无符号变量中
printf("%d\n",price);
結果: -1 ではなく 65535