首页 > 其他 > 详细

第7天

时间:2014-03-30 10:48:24      阅读:530      评论:0      收藏:0      [点我收藏+]
C++中一个 char 的大小和一个机器字节一样。
有其他的一些字符类型(如wchar_t, char16_t, char32_t, wchar_t)用于扩展字符集,用于确保可以存放机器最大扩展字符集中的任意一个字符,如char16_t和char32_t为Unicode字符集服务(Unicode是用于拜师所有自然语言中的字符标准)

可寻址的最小内存块称为“字节(byte)”,储存的基本单元称为“字(word)”,在c++语言中,一个字节要至少能荣天娜机器基本字符集中的字符。大多数机器的字节有8比特构成,字则由32或64比特组成,也就是4或8个字节。

无符号类型只能表示大于等于0的值。

书上的经验——如何选择数据类型
  • 当确定数值不可能为负数时,选用无符号数
  • 算术表达式中不要用char和bool,因为类型char在一些机器上是有符号的,而在另一些机器上没有符号的,如果需要使用一个不大的整数,明确指定它的类型是signed char 和 unsigned char。
  • 执行浮点数运算时选用double,这是因为float经常精度不够而且double和float的计算代价相差无几,对某些机器来说,前者甚至比后者还要快。long double运行时的消耗不小。

当把一个整数值赋值给浮点类型时,小数部分记为0。如果该整数占的空间超过了浮点类型的容量,精度可能会丢失。

当我们赋给无符号类型一个超出它表示范围的的值时,结果是初始值对无符号类型表示数值总数取模后的数。例如:unsigned char c = -1;  //假设char占8个比特,c的值是255。
在这里,8比特大小的unsigned char 可以表示0到255区间的值,如果我们赋一个区间以外的值,则实际的结果是该值对256取模后的所得余数。(-1 mod 256 = 255)

当我们赋给带符号类型一个超出它表示范围的值时,结果是未定义的(undefined)。此时,程序可能继续工作、可能崩溃、也可能生成垃圾数据。例如:signed char c2 = 256;  //假设char占8个比特,c2的值是未定义的。

如果把 int 的尺寸看成一个确定不变的已知值,程序就不可移植了(nonportable)。

unsigned u = 10;
int i = -42;
cout << i + i << endl;
cout << u + i << endl;  //如果int占32位,输出4294967264
在第二个输出表达式中,相加前首先要把整数-42转成无符号数

两个非符号类型数相减,如果结果为负数,那么其结果也要被转为非符号数。


第7天,布布扣,bubuko.com

第7天

原文:http://www.cnblogs.com/SFTD/p/3633149.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!