转自这位大佬:https://blog.csdn.net/cherrydreamsover/article/details/81410364
https://blog.csdn.net/cherrydreamsover/article/details/81022994(orz)
有关每一个字节的取值范围如下:
1、char:表示字符型数据,占1个字节(8个二进制位),包含256个不同的整数。
有符号的范围: -128 ~ 127。每个整数都对应一个字符。整数和字符的对应关系由ASCII码表规定。
无符号的范围:0 ~ 255。
2、short:表示短整型数据,一般占2个字节(16个二进制位)。
有符号的范围:-32768 ~ 32767。
无符号的范围0到65535。
3、int:表示基本整型数据,一般占4个字节(32个二进制位)。
有符号的范围:-2147483648 ~ 2147483647。
无符号的范围:0 ~ 4294967295。
4、long:表示长整型数据,一般占4个字节(32个二进制位)。
有符号的范围:-2147483648 ~ 2147483647。
无符号的范围:0 ~ 4294967295。
5、float:表示单精度浮点型数据,一般占4个字节(32个二进制位,1bit(符号位) 8bits(指数位) 23bits(尾数位))。
范围:-3.40E+38 ~ +3.40E+38
精度:6 ~ 7位有效数字
6、double:表示双精度浮点型数据,一般占8个字节(64个二进制位,1bit(符号位) 11bits(指数位) 52bits(尾数位))。
范围:-1.79E+308 ~ +1.79E+308
精度:15 ~ 16位有效数字
7、unsigned:表示无符号数据。
8、signed:表示有符号数据,默认不用写。
- 用C语言测试自己编译器所占字节的大小,代码实现如下:
#include<stdio.h> #include<climits> #include<float.h> int main() { int* p; printf("char = %d\n", sizeof(char)); printf("signed char = %d\n", sizeof(signed char)); printf("unsigned char = %d\n", sizeof(unsigned char)); printf("short = %d\n", sizeof(short)); printf("signed short = %d\n", sizeof(signed short)); printf("unsigned short = %d\n", sizeof(unsigned short)); printf("int = %d\n", sizeof(int)); printf("signed int = %d\n", sizeof(signed int)); printf("unsinged int = %d\n", sizeof(unsigned int)); printf("float = %d\n", sizeof(float)); printf("double = %d\n", sizeof(double)); printf("long = %d\n", sizeof(long)); printf("signed long = %d\n", sizeof(signed long)); printf("unsigned long = %d\n", sizeof(unsigned long)); printf("longlong = %d\n", sizeof(LONGLONG)); printf("p = %d\n", sizeof(p)); return 0; }
运行结果如下:
- 再来看一下每个关键字的最大值
#include<iostream> #include<climits> using namespace std; int main() { char n_char = CHAR_MAX; char n_schar = SCHAR_MAX; char n_uchar = UCHAR_MAX; short n_short = SHRT_MAX; short n_ushort = USHRT_MAX; int n_int = INT_MAX; unsigned int n_uint = UINT_MAX; float n_float = FLT_MAX; float n_maxfloat = FLT_MANT_DIG; float n_10float = FLT_MAX_10_EXP; long n_long = LONG_MAX; long n_Ulong = ULONG_MAX; long long n_llong = LLONG_MAX; long long n_ullong = ULLONG_MAX; cout << "max value is :" << endl; cout << "char is:" << n_char << endl; cout << "usigned char is:" << n_schar << endl; cout << "unsigned char is:" << n_uchar << endl; cout << "int is:" << n_int << endl; cout << "unsigned int is:" << n_uint << endl; cout << "short is:" << n_short << endl; cout << "unsigned short is:" << n_ushort << endl; cout << "folat is :" << n_float << endl; cout << "numbers of float is:" << n_maxfloat << endl; cout << "float 10_exp is:" << n_10float << endl; cout << "long is:" << n_long << endl; cout << "unsigned long is:" << n_Ulong << endl; cout << "long long is:" << n_llong << endl; cout << "unsigned long long is:" << n_ullong << endl; return 0; }
因为char没有最大值,所以这里没有输出结果!
- 每个关键字的最小值
#include<iostream>
#include<climits>
using namespace std;
int main()
{
short n_short = SHRT_MIN;
int n_int = INT_MIN;
float n_float = FLT_MIN;
float n_10float = FLT_MIN_10_EXP;
long n_long = LONG_MIN;
long long n_llong = LLONG_MIN;
cout << "min value is :" << endl;
cout << "int is:" << n_int << endl;
cout << "short is:" << n_short << endl;
cout << "folat is :" << n_float << endl;
cout << "float 10_exp is:" << n_10float << endl;
cout << "long is:" << n_long << endl;
cout << "long long is:" << n_llong << endl;
return 0;
}
运行结果:
在C语言和C++中,经常会出现某一种数据类型所占的字节数为多大的问题,其实这些机器字长和编译器有关系,通过总结,如下图:
其中,彩色部分代表的意思是该类型在三种平台下所占字节大小不同,黑色说明所占字节数相同!
默认:32位操作系统