基本内置类型

C++ 定义了一组表示整数、浮点数、单个字符和布尔值的算术类型,另外还定义了一种称为 void 的特殊类型。

算术类型的存储空间依机器而定。这里的存储空间是指用来表示该类型的位(bit)数。C++标准规定了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。

C++ 算术类型 :

类型

含义

最小存储空间

bool

布尔类型

未定义

char

字符

8 bits

wchar_t

宽字符

16 bits

char16_t

Unicode字符

16 bits

char32_t

Unicode字符

32 bits

short

短整型

16 bits

int

整型

16 bits

long

长整型

32 bits

long long

长整型

64 bits

float

单精度浮点数

6 位有效数字

double

双精度浮点数

10 位有效数字

long double

扩展双精度浮点数

10 位有效数字


因为位数的不同,这些类型所能表示的最大(最小)值也因机器的不同而有所不同。

整型

表示整数、字符和布尔值的算术类型合称为整型 。 

字符类型有两种:char 和 wchar_t。char 类型保证了有足够的空间,能够存储机器基本字符集中任何字符相应的数值,因此,char 类型通常是单个机器字节(byte)。wchar_t 类型用于扩展字符集,比如汉字和日语,这些字符集中的一些字符不能用单个 char 表示。

short、 int 和 long 类型都表示整型值, 存储空间的大小不同。一般, short类型为半个机器字长,int 类型为一个机器字长,而 long 类型为一个或两个机器字长(在 32 位机器中 int 类型和 long 类型通常字长是相同的)。

整型赋值 

把一个非bool类型的算术值赋给布尔类型时,初始值为0则结果为false,否则结果为true。 

把一个bool类型的值赋给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1。 

把一个浮点数赋给整数时,进行了近似处理。结果值将仅保留浮点数中小数之前的部分。 

把一个整数赋值给浮点类型时,小数部分记作0。 

给无符号类型赋一个超过其表示范围的值时,结果是初始值对无符号类型标识数值总数取模后的余数。例如,如果试图将 336 存储到 8 位的 unsigned char 中,则实际赋值为 80,因为 80 是 336 对 256 求模后的值。 

对于无符号类型来说,负数总是超出其取值范围。无符号类型的对象可能永远不会保存负数。有些语言中将负数赋给无符号类型是非法的。C++ 中,把负值赋给无符号类型是完全合法的,其结果是该负数对该类型的取值个数求模后的值。所以,如果把 -1 赋给 8 位的 unsigned char,那么结果是 255,因为 255 是 -1 对256 求模后的值。 

给带符号类型赋一个超出它表示范围的值时,结果是未定义的,此时程序可能继续工作、可能崩溃,也可能生成垃圾数据。 

含有无符号类型的表达式 

当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数,把int转换成无符号数的过程和把int直接赋给无符号变量是一样的:

unsigned u=10;
int i=-42;
cout<<i+i<<endl;  //输出-84
cout<<u+i<<endl; //若int占32位,输出4294967264

第一个输出表达式中两个负数相加得到了期望的结果;第二个输出表达式中,先把-42转换成无符号数再进行计算。

当从无符号数中减去一个值时,必须保证结果不能是负值: 

unsigned u1 = 42, u2 = 10;
cout << u1 - u2 << endl;  //输出32
cout << u2 - u1 << endl;  //结果是取模后的值

在for循环中使用无符号数,要特别注意:

for (unsigned i = 10; i >= 0; i--)
        cout << i << endl;

这个循环将永远进行下去。

浮点型

类型 float、 double 和 long double 分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。一般 float 类型用一个字(32 位)来表示,double 类型用两个字(64 位) 来表示, long double 类型用三个或四个字(96 或 128 位)来表示。类型的取值范围决定了浮点数所含的有效数字位数。

对于实际的程序来说,float 类型精度通常是不够的——float 型只能保证 6 位有效数字,而 double 型至少可以保证 10 位有效数字,能满足大多数计算的需要。

转载于:https://www.cnblogs.com/xiaojianliu/articles/8900997.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值