(C++)2.2整数型


もう一度復習しましょう!!
うん?「でもどうしてintは2 byteなの?」そう思う人がいる.私もそう思います.C言語を勉強していた頃、int型は4 byteしか知らないのに、なぜここで違うのかと悩んだことがあります.ちなみに、電子学部でimbeddy科目を学び、MCUのプログラミングを行い、その際に使われた言語はC言語です.当時int兄は2バイト長4バイトでした間違えた.今はよく知られていますが、最小サイズは2 byteで、ほとんどのOSとCompilerは4 byteで働いています.ここでint型は4 byteのはずです.
の先頭はシンボルに使用される.したがって,int型を用いる場合,我々が使用できるデータサイズは31ビットである.
#include <iostream>

int main(void)
{
	using namespace std;

	short s = 1;
	int i = 1;
	long l = 1;
	long long ll = 1;

	cout << sizeof(short) << endl;
	cout << sizeof(int) << endl;
	cout << sizeof(long) << endl;
	cout << sizeof(long long) << endl;

	return 0;
}

output : 2
	 4
	 4 
	 8
上のコードは、前の授業で学んだことを復習したと考えられます.データ型サイズのコードを出力します.
#include <iostream>
#include <cmath>

int main(void)
{
	using namespace std;

	short s = 1;
	
	cout << std::pow(2, sizeof(short) * 8) << endl;
	
	return 0;
}

output : 65536
ここでちょっと変わった#includeを使用してcmathというヘッダファイルを読み込み、cmathのpow()を使用して平方値を出力します.
std::pow(x,y)
計算結果は以下の通りです.したがって、65536が出力される.
では、signed出力の最大数を加えるとどうなるのでしょうか.
#include <iostream>
#include <cmath>
#include <limits>

int main(void)
{
	using namespace std;

	short s = 1;
	
	cout << std::pow(2, sizeof(short) * 8 - 1) - 1 << endl;
	cout << std::numeric_limits<short>::max() << endl;
	cout << std::numeric_limits<short>::min() << endl;
	cout << std::numeric_limits<short>::lowest() << endl;
	return 0;
}

output : 32767
	 32767
     	 -32768
         -32768
突然現れた#include <limits>頭は痛いかもしれませんが、私たちをもっと親しくするという意味のようです.自分たちで計算した値とCompilerで計算した値と比較するには、ヘッダファイルを使用して関数をインポートすることが望ましい.そうした結果は同じだった.
ここで、最初の出力が32767であるのは、最初のビットがシンボルビットであり、0を減算して32767が生成されるためである.この関数を用いて解くと,同じ値が決定される.負数であれば0を求めるので−32768と計算されることが分かる.
何もいらないことを知っておく必要があります.ここで最も重要なのは、資料型ごとに「限度」があることです.どうして知ってるの?このコードを見れば分かります.
#include <iostream>
#include <cmath>
#include <limits>

int main(void)
{
	using namespace std;

	short s = 32767;

	s = s + 1; //32768
	cout << s << endl;
	
	return 0;
}

output : -32768
??? なんだよ.どうして32768-32768がないのですか?そう思ってもいいです.shortが持つ大きさを超えているからです.このコードにs+2を加えると、-3277が生成されます.つまり、shortが持つ範囲内で回り続ける.このような間違いを犯したくない場合は、各資料タイプの大きさと数を理解する必要があります.これをオーバーフローと呼びます.