C/C++中各種型別int、long、double、char表示範圍(最大最小值)
#include<iostream>
#include<string>
#include <limits>
using namespace std;
int main()
{
cout << "type: \t\t" << "************size**************"<< endl;
cout << "bool: \t\t" << "所佔位元組數:" << sizeof(bool);
cout << "\t最大值:" << (numeric_limits<bool>::max)();
cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;
cout << "char: \t\t" << "所佔位元組數:" << sizeof(char);
cout << "\t最大值:" << (numeric_limits<char>::max)();
cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
cout << "signed char: \t" << "所佔位元組數:" << sizeof(signed char);
cout << "\t最大值:" << (numeric_limits<signed char>::max)();
cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;
cout << "unsigned char: \t" << "所佔位元組數:" << sizeof(unsigned char);
cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();
cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;
cout << "wchar_t: \t" << "所佔位元組數:" << sizeof(wchar_t);
cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();
cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;
cout << "short: \t\t" << "所佔位元組數:" << sizeof(short);
cout << "\t最大值:" << (numeric_limits<short>::max)();
cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;
cout << "int: \t\t" << "所佔位元組數:" << sizeof(int);
cout << "\t最大值:" << (numeric_limits<int>::max)();
cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;
cout << "unsigned: \t" << "所佔位元組數:" << sizeof(unsigned);
cout << "\t最大值:" << (numeric_limits<unsigned>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;
cout << "long: \t\t" << "所佔位元組數:" << sizeof(long);
cout << "\t最大值:" << (numeric_limits<long>::max)();
cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;
cout << "unsigned long: \t" << "所佔位元組數:" << sizeof(unsigned long);
cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();
cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;
cout << "double: \t" << "所佔位元組數:" << sizeof(double);
cout << "\t最大值:" << (numeric_limits<double>::max)();
cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;
cout << "long double: \t" << "所佔位元組數:" << sizeof(long double);
cout << "\t最大值:" << (numeric_limits<long double>::max)();
cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;
cout << "float: \t\t" << "所佔位元組數:" << sizeof(float);
cout << "\t最大值:" << (numeric_limits<float>::max)();
cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;
cout << "size_t: \t" << "所佔位元組數:" << sizeof(size_t);
cout << "\t最大值:" << (numeric_limits<size_t>::max)();
cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;
cout << "string: \t" << "所佔位元組數:" << sizeof(string) << endl;
// << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;
cout << "type: \t\t" << "************size**************"<< endl;
return 0;
}
/*執行結果分析:
以上結果已經很明白了,一下補充說明幾點:
概念、整型:表示整數、字元和布林值的算術型別合稱為整型(integral type)。
關於帶符號與無符號型別:整型 int、stort 和 long 都預設為帶符號型。要獲得無符號型則必須制定該型別為unsigned,比如unsigned long。unsigned int型別可以簡寫為unsigned,也就是說,unsigned後不加其他型別說明符就意味著是unsigned int。
一位元組表示八位,即:1byte = 8 bit;
int: 4byte = 32 bit 有符號signed範圍:2^31-1 ~ -2^31即:2147483647 ~ -2147483648無符號unsigned範圍:2^32-1 ~ 0即:4294967295 ~ 0
long: 4 byte = 32 bit 同int型
double: 8 byte = 64 bit 範圍:1.79769e+308 ~ 2.22507e-308
long double: 12 byte = 96 bit 範圍: 1.18973e+4932 ~ 3.3621e-4932
float: 4 byte = 32 bit 範圍: 3.40282e+038 ~ 1.17549e-038
int、unsigned、long、unsigned long 、double的數量級最大都只能表示為10億,即它們表示十進位制的位數不超過10個,即可以儲存所有9位整數。而short只是能表示5位;
另外對於浮點說而言:使用double型別基本上不會有錯。在float型別中隱式的精度損失是不能忽視的,二雙精度計算的代價相對於單精度可以忽略。事實上,在有些機器上,double型別比float型別的計算要快得多。float型只能保證6位有效數字,而double型至少可以保證15位有效數字(小數點後的數位),long double型提供的精度通常沒有必要,而且還要承擔額外的執行代價。
double是8位元組共64位,其中小數位佔52位,2-^52=2.2204460492503130808472633361816e-16,量級為10^-16,故能夠保證2^-15的所有精度。
在有些機器上,用long型別進行計算所付出的執行時代價遠遠高於用int型別進行同樣計算的代價,所以算則型別前要先了解程式的細節並且比較long型別與int型別的實際執行時效能代價。
歡迎提出寶貴意見,以幫助我改進,不勝感激!!!
——桑海整理
相關文章
- c++ 基本資料型別(int、float、double、long、long long)最大值,最小是表示方法C++資料型別
- C/C++——求下面資料型別的最大值和最小值: char, short, int, long, float, double, long double和numeric_limits使用C++資料型別MIT
- 準確詳解:C/C++ float、double資料型別的表示範圍及精度C++資料型別
- int/double資料範圍
- int float double 各型別的最大值最小值型別
- C/C++_int/float/double的最大值和最小值C++
- C++11獲取double型別的最大最小值C++型別
- C語言中關於float、double、long double精度及數值範圍理解C語言
- C C++變數型別大小和範圍C++變數型別
- Go/Golang語言各種資料型別記憶體位元組佔用大小和取值範圍(最小值最大值)Golang資料型別記憶體
- 測試Java中的long,int基本型別Java型別
- int型別和long long型別運算執行時間的差別型別
- CAPL指令碼中常用到的資料型別轉換——數字型別(int/double)和字串型別(char array)指令碼資料型別字串
- C++ 表示式中的型別轉換C++型別
- C,C++中如何向main(int argc , char argv[])傳遞引數C++AIGC
- MySQL 五種整型資料型別的範圍與區別 tinyint smallint mediumint int bigintMySql資料型別
- MySQL中各種欄位的取值範圍(轉)MySql
- C++中的各種鎖C++
- SQL SERVER數值型別int、bigint、smallint 和 tinyint範圍SQLServer型別
- 【C++】CONST CHAR*型別的值不能用於初始化CHAR*型別的實體C++型別
- Python 四種數值型別(int,long,float,complex)區別及轉換Python型別
- 資料型別範圍資料型別
- 說說 Spring 表示式語言(SpEL)中的各種表示式型別Spring型別
- C++ 中各種map的使用C++
- float型別最大值和最小值型別
- 正規表示式匹配各種型別數字型別
- C++中vector<int>& numsC++
- C++中string轉換為char*型別返回後亂碼問題C++型別
- double型別中可精確表達的最大正整數型別
- 聊聊 C++ 中的四種型別轉換符C++型別
- C++ 中四種強制型別轉換的區別C++型別
- C/C++——基本資料型別的大小並且sizeof(int *) = 8C++資料型別
- C++中string、char *、char[]、const char*的轉換C++
- c++中變數型別C++變數型別
- c# (int)double顯式轉化C#
- 關於C/C++ int (*t5)[3] 指標型別說明C++指標型別
- VS C++ 2017中const char* 型別的值不能用於初始化char*的解決C++型別
- c++各種字串互轉(char*、wchar_t*、CString、string、wstring、LPCWSTR)C++字串