C++变量类型的那些事

C++变量类型的那些事

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

类型含义最小尺寸
bool布尔类型未定义
char字符8位
wchar_t宽字符16位
char16_tUnicode字符16位
char32_tUnicode字符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。当然可以用前缀和后缀来说明。

指定字面值的类型

前缀类型
uchar16_t
Uchar32_t
Lwchar_t
u8char

整数

后缀最小匹配类型
u or Uunsigned
l or Llong
ll or LLlong long

浮点数

后缀类型
f or Ffloat
l or Llong double
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值