一 極值
可以使用 std::numeric_limits 獲取各種算術類型的最大最小值,頭文件 <limits>
定義於頭文件 <limits>
template< class T > class numeric_limits;
numeric_limits 類模板提供查詢各種算術類型屬性的標準化方式。
通過 numeric_limits 模板的特化提供此信息。標準庫爲所有算術類型制定可用的特化:
template<> class numeric_limits<bool>;
template<> class numeric_limits<char>;
template<> class numeric_limits<signed char>;
template<> class numeric_limits<unsigned char>;
template<> class numeric_limits<wchar_t>;
template<> class numeric_limits<char8_t>; // C++20 特性
template<> class numeric_limits<char16_t>; // C++11 特性
template<> class numeric_limits<char32_t>; // C++11 特性
template<> class numeric_limits<short>;
template<> class numeric_limits<unsigned short>;
template<> class numeric_limits<int>;
template<> class numeric_limits<unsigned int>;
template<> class numeric_limits<long>;
template<> class numeric_limits<unsigned long>;
template<> class numeric_limits<long long>;
template<> class numeric_limits<unsigned long long>;
template<> class numeric_limits<float>;
template<> class numeric_limits<double>;
template<> class numeric_limits<long double>;
二 計算機表示方法
先看Demo
#include <cstdint>
#include <iostream>
#include <limits>
#include <bitset>
int main() {
char max = std::numeric_limits<char>::max();
char min = std::numeric_limits<char>::min();
std::cout << "char max : " << int(max) << " " << std::bitset<8>(max) << std::endl;
std::cout << "char min : " << int(min) << " " << std::bitset<8>(min) << std::endl;
std::cout << "0 : " << std::bitset<8>(0) << std::endl;
std::cout << "-1 : " << std::bitset<8>(-1) << std::endl;
std::cin.get();
return 0;
}
結果:
char max : 127 01111111
char min : -128 10000000
0 : 00000000
-1 : 11111111
說明:(int8_t爲例說明)
1. char類型(int8_t)的取值範圍爲: -128 ~ 127, 共計 2 ^ 8 = 256個。
2. 數值在計算機底層以二進制存儲。
3. 原碼反碼補碼是爲了輔助說明數值在計算機中的表示方法。不必過於糾結於原碼反碼補碼。
原碼:最基本的二進制表示法。最高位爲符號位,正數最高位爲0, 負數最高位爲1。其他位存放該數值的絕對值。
原碼舉例:
1原碼:0 000 0001
-1原碼:1 000 0001
反碼:正數的反碼 = 原碼; 負數的反碼 = 原碼除符號位外取反。
反碼舉例:
1反碼:0 000 0001
-1反碼:1 111 1110
補碼:正數的補碼 = 原碼; 負數的補碼 = 反碼 + 1。
補碼舉例:
1補碼:0 000 0001
-1補碼:1 111 1111 (例子結果)
正數以原碼錶示;負數以補碼錶示。
4. 特殊注意
0就別套概念了,全部位均是0;
最小值-128 : 1000 0000 怎麼表示出來的?不需計算,這是規定, 最高位爲1, 其他位全0。
三 參考