【C言語】int型の範囲の整数

  • このエントリーをはてなブックマークに追加

C言語のint型は32ビット(4バイト)の符号付き整数を表現するために使用される。符号を考慮すると、int型は-2,147,483,648から2,147,483,647までの範囲の整数を表現できる
2,147,483,647 = 21億4748万3647
-2,147,483,648 = 21億4748万3647
2進数「00000000000000000000000000000000」(32桁)は10進数「0」である。
2進数「00000000000000000000000000000001」(32桁)は10進数「1」である。
~中略~
2進数「01111111111111111111111111111111」(32桁)は10進数「2,147,483,647」である。
2進数「10000000000000000000000000000000」(32桁)は10進数「-2,147,483,648」である。
2進数「10000000000000000000000000000001」(32桁)は10進数「-2,147,483,647」である。
2進数「10000000000000000000000000000002」(32桁)は10進数「-2,147,483,646」である。
~中略~
2進数「11111111111111111111111111111101」(32桁)は10進数「-3」である。
2進数「11111111111111111111111111111110」(32桁)は10進数「-2」である。
2進数「11111111111111111111111111111111」(32桁)は10進数「-1」である。

それと、int型は実装依存だからコンパイラでint型で表現できる数値が違う。
「Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland」ではint型は-2,147,483,648から2,147,483,647までの範囲の整数を表現している。



次のコードをtest.cとする

環境
windows10(64bit)
Borland C++ 5.5.1 for Win32

decimal (名)10進数


#include <stdio.h>
int main() {

	int decimal;
    
	printf("10進数を入力してください: ");
	scanf("%d", &decimal);
	
	printf("入力された数値: %d\n", decimal);
	
    return 0;
}

コンパイルして実行する。
次のような挙動になる。
うーん。こんな挙動になるのか。


c:\coco_c>bcc32 test.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland

c:\coco_c>test.exe
10進数を入力してください: 2147483648
入力された数値: -2147483648

c:\coco_c>test.exe
10進数を入力してください: 2147483647
入力された数値: 2147483647

c:\coco_c>test.exe
10進数を入力してください: 2147483648
入力された数値: -2147483648

c:\coco_c>test.exe
10進数を入力してください: -2147483649
入力された数値: 2147483647

c:\coco_c>
  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*