C++变量类型的那些事

来源:互联网 发布:fw190d13数据 编辑:程序博客网 时间:2024/06/01 13:05

  • C变量类型的那些事
    • 如何选择类型
    • 类型转换
    • 字面值常量
      • 整形和浮点型的字符常量
      • 指定字面值的类型

C++变量类型的那些事

同样的变量类型名在不同的机器 下的含义不一定相同,下表C++标准规定的变量所对应的的最小尺寸

类型 含义 最小尺寸 bool 布尔类型 未定义 char 字符 8位 wchar_t 宽字符 16位 char16_t Unicode字符 16位 char32_t Unicode字符 32位 short 短整型 16位 int 整型 16位 long 长整型 32位 long long 长整型 64位 float 单精度浮点型 6位有效数字 double 双精度浮点型 10位有效数字 long double 扩展精度浮点型 10位有效数字

有些类型分为带符号的(signed)和无符号的(unsigned)两种。一般情况下,缺省符号都是signed,如int,short,long等都是有符号的,值得一提的是,与其他整形不同,字符型char和signed char并不一样。char具体是signed还是unsigned由编译器决定。

如何选择类型

这儿提几点建议:

  1. 如果你需要一个不大的整数,可有明确地指定他的类型是signed char或者是unsigned char。
  2. 执行浮点数运算时选用double,引文float通常精度不够而且双精度和单精度的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至更快一些。long double提供的精度在一般情况下是没有必要的,而且带来的时耗也不容忽视。

类型转换

  1. 当我们把一个整数值赋给浮点数类型时,小数部分记为0。如果该整形所占的空间超过了浮点数的容量,精度可能会丢失。
  2. 当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值取模后的余数。
  3. 当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。此时,程序可能继续工作,可能崩溃,也可能生成垃圾数据。

写程序时一定要考虑程序的可移植性,例如在不同的平台上int的长度是不一样的,如果我们把int的尺寸看成是一个确定不变的已知值,那么这样的程序就是不可移植的(nonportable)。

字面值常量

一个形如42的值被称作位字面值常量(literal),这样的值一望而知。每个字面值常量都对应一个数据类型,字面值常量的的形式和值决定了它的数据类型。

整形和浮点型的字符常量

默认情况下,整数的十进制字面值对应的是带符号的数据类型,而八进制和十六进制则不确定。十进制的字面类型是int,long,longlong中尺寸最小的那一个,当然前提是这种类型要容纳下当前的值。而八进制则是int,unsigned int,long,unsigned long,longlong,unsigned long long 中尺寸最小者。
浮点型字面值表现为一个小数或以科学计数法表示的指数:
3.1415 3.14159E0 0. 0e0 .001
默认情况下,数据类型是double。当然可以用前缀和后缀来说明。

指定字面值的类型

前缀 类型 u char16_t U char32_t L wchar_t u8 char

整数

后缀 最小匹配类型 u or U unsigned l or L long ll or LL long long

浮点数

后缀 类型 f or F float l or L long double
0 0