(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ビットである.
std::pow(x,y)
計算結果は以下の通りです.したがって、65536が出力される.
では、signed出力の最大数を加えるとどうなるのでしょうか.
ここで、最初の出力が32767であるのは、最初のビットがシンボルビットであり、0を減算して32767が生成されるためである.この関数を用いて解くと,同じ値が決定される.負数であれば0を求めるので−32768と計算されることが分かる.
何もいらないことを知っておく必要があります.ここで最も重要なのは、資料型ごとに「限度」があることです.どうして知ってるの?このコードを見れば分かります.
うん?「でもどうして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が持つ範囲内で回り続ける.このような間違いを犯したくない場合は、各資料タイプの大きさと数を理解する必要があります.これをオーバーフローと呼びます.Reference
この問題について((C++)2.2整数型), 我々は、より多くの情報をここで見つけました https://velog.io/@joon10266/C-2.2-정수형テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol