这里的结果是在32位机上面运行的结果。具体的大小还和编译器有关,是不确定的

[cpp] view plaincopy
  1. #include<iostream>
  2. #include<string>
  3. #include <limits>
  4. using namespace std;
  5. int main()
  6. {
  7. cout << "type: \t\t" << "************size**************"<< endl;
  8. cout << "bool: \t\t" << "所占字节数:" << sizeof(bool);
  9. cout << "\t最大值:" << (numeric_limits<bool>::max)();
  10. cout << "\t\t最小值:" << (numeric_limits<bool>::min)() << endl;
  11. cout << "char: \t\t" << "所占字节数:" << sizeof(char);
  12. cout << "\t最大值:" << (numeric_limits<char>::max)();
  13. cout << "\t\t最小值:" << (numeric_limits<char>::min)() << endl;
  14. cout << "signed char: \t" << "所占字节数:" << sizeof(signed char);
  15. cout << "\t最大值:" << (numeric_limits<signed char>::max)();
  16. cout << "\t\t最小值:" << (numeric_limits<signed char>::min)() << endl;
  17. cout << "unsigned char: \t" << "所占字节数:" << sizeof(unsigned char);
  18. cout << "\t最大值:" << (numeric_limits<unsigned char>::max)();
  19. cout << "\t\t最小值:" << (numeric_limits<unsigned char>::min)() << endl;
  20. cout << "wchar_t: \t" << "所占字节数:" << sizeof(wchar_t);
  21. cout << "\t最大值:" << (numeric_limits<wchar_t>::max)();
  22. cout << "\t\t最小值:" << (numeric_limits<wchar_t>::min)() << endl;
  23. cout << "short: \t\t" << "所占字节数:" << sizeof(short);
  24. cout << "\t最大值:" << (numeric_limits<short>::max)();
  25. cout << "\t\t最小值:" << (numeric_limits<short>::min)() << endl;
  26. cout << "int: \t\t" << "所占字节数:" << sizeof(int);
  27. cout << "\t最大值:" << (numeric_limits<int>::max)();
  28. cout << "\t最小值:" << (numeric_limits<int>::min)() << endl;
  29. cout << "unsigned: \t" << "所占字节数:" << sizeof(unsigned);
  30. cout << "\t最大值:" << (numeric_limits<unsigned>::max)();
  31. cout << "\t最小值:" << (numeric_limits<unsigned>::min)() << endl;
  32. cout << "long: \t\t" << "所占字节数:" << sizeof(long);
  33. cout << "\t最大值:" << (numeric_limits<long>::max)();
  34. cout << "\t最小值:" << (numeric_limits<long>::min)() << endl;
  35. cout << "unsigned long: \t" << "所占字节数:" << sizeof(unsigned long);
  36. cout << "\t最大值:" << (numeric_limits<unsigned long>::max)();
  37. cout << "\t最小值:" << (numeric_limits<unsigned long>::min)() << endl;
  38. cout << "double: \t" << "所占字节数:" << sizeof(double);
  39. cout << "\t最大值:" << (numeric_limits<double>::max)();
  40. cout << "\t最小值:" << (numeric_limits<double>::min)() << endl;
  41. cout << "long double: \t" << "所占字节数:" << sizeof(long double);
  42. cout << "\t最大值:" << (numeric_limits<long double>::max)();
  43. cout << "\t最小值:" << (numeric_limits<long double>::min)() << endl;
  44. cout << "float: \t\t" << "所占字节数:" << sizeof(float);
  45. cout << "\t最大值:" << (numeric_limits<float>::max)();
  46. cout << "\t最小值:" << (numeric_limits<float>::min)() << endl;
  47. cout << "size_t: \t" << "所占字节数:" << sizeof(size_t);
  48. cout << "\t最大值:" << (numeric_limits<size_t>::max)();
  49. cout << "\t最小值:" << (numeric_limits<size_t>::min)() << endl;
  50. cout << "string: \t" << "所占字节数:" << sizeof(string) << endl;
  51. // << "\t最大值:" << (numeric_limits<string>::max)() << "\t最小值:" << (numeric_limits<string>::min)() << endl;
  52. cout << "type: \t\t" << "************size**************"<< endl;
  53. return 0;
  54. }

/*运行结果分析:

以上结果已经很明白了,一下补充说明几点:

概念、整型:表示整数、字符和布尔值的算术类型合称为整型(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类型的实际运行时性能代价。

int数据类型的位数为16位,short int数据类型的位数也是16位。而long int的位数为32位,可用来存储比较大的整数。
short int 和 long int可以缩写为short 和 long。
             C语言中的整型数据类型int、short int 和 long int

名称

全称类型说明符

缩写类型说明符

位数

范围

整型

int

int

16位

-32768至+32767

无符号整型

unsigned int

unsigned

16位

0 至 65,535

短整型

short int

short

16位

-32768至+32767

无符号短整型

unsigned short int

unsigned short

16位

0 至 65,535

长整型

long int

long

32位

-2,147,483,648 至 2,147,483,647

无符号长整型

unsigned long int

unsigned long

32位

0至4,294,967,295

整型变量的声明方式:
int sum;
long int population;
unsigned int sum;

在一个语句中声明多个属于同一类型的变量:
int withd, height;
int 类型的变量初始化方式:
withd = 150; //前面已经声明,在此进行初始化
int height = 60; //直接在一个语句中进行声明和初始化
C语言中整型常量有三种不同的表示形式:
     1、八进制整型常量:在八进制数值前面加前缀“0”,其数码取值为0~7。例如:054、0567、05421。
     2、十六进制整型常量:前缀为“0X”或“0x“,其数码取值为0~9、A~F 或 a~f。例如:0X3D、0XE0、0xfff等。
     3、十进制整型常量:既无前缀也无后缀。例如:254、745、890等。如将存储为long类型,需要在数字序列最后附一个字母L 或 l 作为后缀。例如:245L、7850L、124l等

1.其它整数类型
   int 是 C 语言的基本整数类型,可以满足我们处理一般数据的需求。C 语言还提供了四个可以修饰 int 的关键字:short、long、signed,以及 unsigned。利用这四个关键字,C 语言标准定义了以下整数类型:
    1) short int(可简写为 short),和 int 一样,也是有符号整数
    2) long int(简写:long),有符号整数
    3) long long int(简写:long long),C99 标准添加的类型,
      有符号整数
    4) unsigned int(简写:unsigned),无符号整数,不能表示负数
    5) unsigned long int(简写:unsigned long),无符号整数,
      不能表示负数
    6) unsigned short int(简写:unsigned short),无符号整数,
      不能表示负数
    7) unsigned long long int(简写:unsigned long long),
      C99 添加的类型,无符号整数
    8) 所有没有标明 unsigned 的整数类型默认都是有符号整数。
      在这些整数类型前面加上 signed 可以使读者更清楚地知道
      这些是有符号整数,尽管有没有 signed 都表示有符号整数。
      例如:signed int 等同于 int 。
  一般我们把 short 称为短整型,把 long 称为长整型,把 long long 称为超长整型,把 int 称为整型。unsigned 打头的那些整数类型统称为无符号整型。例如:我们称 unsigned short 为无符号短整型。以此类推。

2.声明方式
  这些整数类型的声明方式与 int 类型的声明方式一样。例如:
      long int estine;
      long johns;
      short int erns;
      short ribs;
      unsigned ints_count;
      unsigned players;
      unsigned longheadcount;
      unsigned shortyesvotes;
      long long ago;  /* C99 特有 */
      unsigned long longego;  /* C99 特有 */
如果您的编译器不支持 C99 标准,那就不能使用 long long 和 unsignedlong long。

3.取值范围(表示范围)
  标准也规定了这些整数类型的最小取值范围。short 的最小表示范围和 int 一样,都是-32767 到 32767 。也就是 -(2^15 - 1)到(2^15 - 1)。其中,2^15表示 2 的 15 次方。类似地,2 的 20 次方记作2^20 ,以此类推。注意:C 语言中 2^15 并不表示 2 的 15 次方,为了书写方便,我们姑且这么表示。long 的最小取值范围是 -2147483647 到 2147483647 。也就是 -(2^31 - 1) 到 (2^31 - 1) 。unsignedshort的最小表示范围和unsigned int 一样,都是 0 到 65535(2^16 - 1)。unsigned long 的最小取值范围是 0 到 4294967295(2^32 - 1)。long long的最小取值范围是 -9223372036854775807(-(2^63 - 1))到9223372036854775807(2^63 - 1);unsigned long long 是 0 到 18446744073709551615(2^64 - 1)。
  标准规定,int 的表示范围不能小于 short 的表示范围,long 的表示范围不能小于 int 的表示范围。这就是说 short 型变量占用的空间可能比 int 型变量少,而 long 型变量占用的空间可能比 int 型变量多。16 位(bit)的计算机中,int 和 short 一般都是 16 位,而 long 是 32位;32位的计算机中,short一般是 16 位,而long和int是 32位。TC2(16位的编译器)中,int是16位的;而 Dev-C++(32 位的编译器)中,int 是 32 位的。
  使用 unsigned int 声明的变量只能表示非负整数(0 和正整数)。如果 int 是 16 位的话,那么 unsigned int 的表示范围是 0 到 65535(2^16 - 1)。这是因为 unsigned 不需要符号位,可以把 16 个位全都用于表示整数。而 int 需要一个位作为符号位,用于表示正负,只有 15 个位用于表示整数。
  目前,long long 一般 64 位,long 是 32 位,short 是 16 位,而 int 或者 16 位,或者 32 位。具体某个编译器到底使用多少位来表示这些类型,我们可以用运算符 sizeof 来获取。例如:
       printf( "%lu\n", (unsignedlong)sizeof(int) * 8 );  /* 输出 int 的位数 */
       printf( "%zu\n",sizeof(short) * 8 );  /* 输出 short 的位数 */
   sizeof 运算符返回其操作数占用空间的大小,以字节(Byte)为单位。注意,C 定义字节的大小为 char 类型的大小。char 通常是 8 位(bit)的,当然也可以更大。这里我们假设 char 是 8 位的。点击查看 char 类型详细介绍
   sizeof 的用法我们以后会讲到,现在只要有个印象就好了。第二句中的%zu是 C99 特有的,如果您的编译器不支持 C99(准确地说,应该是如果您的编译器使用的库函数不支持 C99),运行结果将会出错。

4.整数类型的选择
  如果您要处理的只是非负整数,那么应该优先使用 unsigned 打头的那些整数类型。如果您要处理的整数超出了 int 所能表示的范围,并且您的编译器中,long 的表示范围比 int 大,那就使用 long。不过,若非必要,尽量不要用 long,因为它可能会降低程序运行效率。有一点要注意:如果您的编译器中,long 和 int 都是 32 位的,并且您需要使用 32 位整数,那么应该用 long,而不要用 int。只有这样,我们的程序才可以安全地移植到 16 位的计算机,因为 16 位的计算机中,int 一般也是 16 位的。类似地,如果您需要使用 64 位整数,那就用 long long。如果 int 是 32 位的话,那么使用 short 可以节省空间,不过您得确保您要处理的整数不会超出 short 的表示范围。这种“节省”对内存大的计算机来说,是没什么意义的。

5. long 型常量和 long long 型常量
  一般来说,整数常量是被当作 int 类型来存储的。如果我们使用的整数常量超出了 int 的表示范围,C 语言规定编译器自动使用 unsigned int 来处理这个常量。如果 unsigned 也不足以表示这个常量的话,编译器就会用 long。如果还表示不了的话,那就依次用 unsigned long,long long,unsigned long long。如果 unsignedlong long 也表示不了,那么编译器就没辙了。注意:long long 和 unsignedlong long 是 C99 特有的。例如:如果 int 是 16 位的话,它就表示不了常量 1000000。编译器会使用 long 来处理这个常量,因为 unsigned int 也表示不了 1000000 。
  同样,十六进制和八进制整数常量通常也是被作为 int 来处理。但是,当我们使用的常量超出了 int 的表示范围后,编译器会依次使用unsigned int,long,unsigned long,long long 和 unsigned long long。直到所使用的类型足以表示那个常量为止。
  有时,我们使用的是较小的常量,但是我们希望这个常量被当作 long 来处理,这就需要在这个常量后面加上后缀 l(小写字母 l)或者 L(大写字母 L)。我们应该避免使用 l ,因为 l 容易和数字 1 混淆。例如:整数常量 7 是被作为 int 来处理的,但整数常量 7L(或者 7l)是被作为 long 来处理的。类似地,在整数常量后面加上后缀 ll 或者 LL ,这个常量就会被当作 long long 来处理。例如:3LL 。如果想使用无符号整数常量的话,还要配合使用后缀 u 或者 U 。例如:2u,3U,4Lu,5ul,6LU,7LLU,8Ull,9uLL 。
  这些后缀也可以用于十六进制和八进制整数常量。例如:020L,010LL,0x30uL,0x40ull 。
参考资料:C Primer Plus, 5th Edtion By Stephen Prata
        The C ProgrammingLanguage 2e By K&R
         C99 标准

整型常量

十进制、八进制和十六进制的整型常量可加后缀以指示类型,如下表所示。

表 2–1 数据类型后缀

后缀

类型

u或U

unsigned

l或L

long

ll或LL

long long [long long和unassigned long long在-xc99=none和-Xc模式下不可用。]

lu、LU、Lu、lU、ul、uL、Ul或UL

unsigned long

llu、LLU、LLu、llU、ull、ULL、uLL、 Ull

unsigned long long

如果设置-xc99=all,编译器将根据常量大小,使用以下列表中可以表示该值的第一项:

  • int
  • long int
  • long long int

如果值超过long long int 可表示的最大值,编译器会发出警告。

如果设置-xc99=none,则为无后缀常量指定类型时,编译器将根据常量大小,使用以下列表中可以表示该值的第一项:

  • int
  • long int
  • unsigned long int
  • long long int
  • unsigned long long int

C++ int,float,double,long表示范围相关推荐

  1. C语言的int, float,double相互转化 (从本质上理解可能的问题)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/github_33873969/article/details/78040129 从学了C语言之后,一 ...

  2. C 语言实例 - 计算 int, float, double 和 char 字节大小

    C 语言实例 - 计算 int, float, double 和 char 字节大小C 语言实例 C 语言实例使用 sizeof 操作符计算int, float, double 和 char四种变量字 ...

  3. 演示多组int,float,double的数与 2,2.0f,2.0d的除法运算和取模运算,如有兴趣,可自行分析对比结果

    因为各种基本数据类型所占用的存储空间各不相同,所以在进行各种计算时,有可能存在精度题.计算机的操作要在内存中进行,而内存容量有限:另一方面,持久化存储设备的存储空间也有限,内存中的数据可能需要持久化保 ...

  4. c语言算式中有double和int,C语言当中int,float,double,char这四个有什么区别?

    区别在以下方面: 一.定义方面: 1.int为整数型,用于定义整数类型的数据 . 2.float为单精度浮点型,能准确到小数点后六位 . 3.double为双精度浮点型,能准确到小数点都十二位 . 4 ...

  5. C++ int float double类型的数据大小端转化

    以下代码抄自<网络多人游戏架构与编程>,可以支持float.int.double等数据类型数据的大小端转换,测试代码为: void TestByteSwap() {int32_t test ...

  6. C/C++语言中计算int,float,double,char四种数据类型所能表示的数据范围

    char        1字节    short       2字节    int         4字节    long        4字节    long long   8字节    float ...

  7. 【编程】char unsigned int float double long 字节数

    定义方面: 1.int为整数型,用于定义整数类型的数据 . 2.float为单精度浮点型,能准确到小数点后六位 . 3.double为双精度浮点型,能准确到小数点都十二位 . 4.char为字符型,用 ...

  8. int, float, double之间不得不说的故事

    抱歉我用了一个这么"二"的题目,不过二点就二点吧,希望内容还不算太二. 其实学习过编程的同学,都对这三个东西再熟悉不过了.int,又称作整型,在.net中特指的是Int32,为32 ...

  9. C语言当中int,float,double,char这四个有什么区别?

    区别在以下方面: 一.定义方面: 1.int为整数型,用于定义整数类型的数据 . 2.float为单精度浮点型,能准确到小数点后六位 . 3.double为双精度浮点型,能准确到小数点都十二位 . 4 ...

  10. string转int/float/double、int/float/double转string、转字符串数组的方法:stoi、stringstream、scanf、to_string、sprintf

    一.string转化为数字 1.使用stoi #include <iostream> #include <string> using namespace std; int ma ...

最新文章

  1. SQL脚本--有关压缩数据库日志
  2. RNN和LSTM的正向/前向传播-图示公式和代码
  3. 吴恩达:数据集的规模和学习机制都很重要!
  4. 基于改进SURF算法的实时视频拼接
  5. 建立索引和主外约束_Mysql索引原理
  6. 【渝粤题库】国家开放大学2021春4010渠道管理答案
  7. 每天一个linux命令(1):ln 命令
  8. pgsql thinkphp5_thinkphp 连接postgresql
  9. 三分钟掌握Go mod常用与高级操作
  10. Log4j CVE-2021-44228后续-CVE-2021-45046,CVE-2021-45105
  11. directx sdk march 2009_小视科技极致轻量级模型人脸识别sdk支持活体检测总模型仅8M...
  12. linux系统安装windows 环境中文字体
  13. 高中计算机基础知识课件,高中信息技术基础教案
  14. linux mq发送测试消息,MQ消息队列搭建命令及方法
  15. prosody IM cert证书安装
  16. xor命令,运算优先级,Matlab计算规则(从左至右),舍入误差,取整函数、求余函数和符号函数,mod和rem的区别
  17. Samtools说明文档网址变更
  18. 云计算与大数据——数据中心
  19. A/N GPU架构解析
  20. 海外主机是什么意思?与国内主机有什么区别?

热门文章

  1. 2021年春季学期-信号与系统-第九次作业参考答案-第二小题
  2. 2020秋季-人工神经网络课程报告
  3. 三个管脚的压电陶瓷片
  4. 第15届全国大学生智能汽车竞赛 人工智能创意赛(预赛)
  5. 手机屏幕 高宽有哪些_企业文化不仅要上墙,更要霸屏!企业文化如何在线上进行宣传?如何在屏幕上宣传?看这篇就够了!...
  6. jmeter tps指标在哪里看_JMeter功能不够用?看这里
  7. mysql emma 使用教材_emma的使用
  8. 卡地亚搜索引擎_「AF厂卡地亚猎豹」网站SEO优化新方向
  9. 循环求100内质数 php_C8循环
  10. 内核驱动模块Makfle