bool类型头文件_1.1 基本数据类型

d530ea256533c6d9a56974095fae91cd.png

基本数据类型

表示

c++定义了一套包括算术类型(arithmetic type)和空类型(void)的在内的基本类型。类型组织结构如下所示: 图一 由于数据在计算机内是以0、1存储的,每一bit位有两种状态,多个bit位组合在一起就有多种状态,比如计算机中最小的寻址单位是8bit,业界将这样连续的8bit称为一个字节。这就说明计算机内的bit位是可以组合成新的东西来使用的,机智的人类有了这个发现开心得不得了,于是按bit位的个数将算术类型分为short、int、long、long long等,那他们为什么不一来就分一个固定长度的bit位用于存储所有的类型呢?一个原因是存储空间的合理利用,你说用一个8bit大小的空间去存一个4bit大的数据合适么?点击查看所有算术类型机器尺寸,不必死记,需要时直接使用sizeof()操作符即可求得对应字的大小。

:与字节由8个bit位组成的道理是一样的,在32位机器上一个字由4字节组成,在64位机器上一个字由8字节组成,大家可以结合字节的大小考虑一下这是为啥。

除去布尔类型和扩展的字符类型外,其他的整型都可以分为符号类型(signed)和无符号类型(unsigned)符号类型可以表示正数、0和负数,无符号类型只能表示非负数。一般来说,short、signed short、int、signed int、long、signed long等都属于符号数,而带unsigned修饰的类型则是无符号数,可是存在一个异类:字符型,他有三种书写形式:char、signed char、unsigned char,但是只有两种表现形式:符号类型与无符号类型,后两种书写形式如其名,char却是随机的,它就像一只变色龙,根据编译器的不同而选择不同的表现形式。

对符号类型的扩展:c++约定了在表示范围内正值和负值应该平衡,也就是理论上singed char的表示范围应该时-127~127,现代计算机实际是表示为-128~127。大家可以在自己机器上验证一下,使用头文件中的一些宏,详情请戳这里。

如何选择类型

越是偏向底层的开发,如嵌入式开发,对内存的使用越是要“斤斤计较”,所以有必要了解一下类型选择的方法。具体如下:

  1. 当明确知晓数值不可能为负时,选用无符号类型。
  2. 使用int执行整数运算。在实际应用中,short常常显得太小而long一般和int有一样的尺寸。如果运算范围超过int的表示范围,则选用long long。
  3. 在算术运算中不要使用char和bool,只有存放字符或布尔值时才使用它们。因为类型char在一些机器上是有符号的,而在一些机器上又是无符号的,所以使用char进行算术运算特别容易出问题。如果真的需要使用一个不大的整数,那么明确指出它的类型是signed char还是 unsigned char。
  4. 执行浮点数运算选用double,这是因为float的精度通常不够而双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度运算还要快。long double提供的精度在一般情况下不用用到,况且它带来的运算时的消耗也不容忽视。
使用int型进行整数运算还有一个值得提起的原因那就是int一般被设为计算机中最自然( natural)的一种类型,计算机处理int型数据是最高效的。

类型转换

c++是一门强类型语言,它对类型的检查是很严格的,于是为了方便程序员,语言中增加了类型转换的概念,包括:隐式类型转换和强制类型转换。这里我们讲一下隐式类型转换。

什么是隐式类型转换? 指不需要用户干预,编译器悄咪咪地进行的类型转换行为。

隐式类型转换的原则 基本内置类型的转换以取值范围的作为转换基础(保证精度不丢失)。隐式转换发生在从小 → 大的转换中。比如char→int。虽然有的编译器也允许从大 → 小的转换,但实际使用要小心,因为这样做数据会被裁剪。

转换条件

  • 混合类型的算术运算表达式中
int 
  • 不同类型的赋值操作
int 
  • 函数参数传值
void 
  • 函数返回值
double 
凡是总有两面性,请容许我打个标语 :“道路千万条,安全编码第一条”,请在你觉得需要进行转换的地方,都如下写:
double 

总结

  1. 学到了计算机中如何表示基本内置类型(其实复杂类型就是通过基本类型衍生出来的);
  2. 学到了合理选择类型方法(节约资源,人人有责 );
  3. 揭露了编译器背着我们干的那些事(类型转换);
  4. 喜欢我的文章的话请您一键三连:关注、赞赏及转发,听说三连的人会学富五车、才高八斗、气宇轩昂、腰缠万贯、心想事成哟~
  5. 欢迎关注我的微信公众号:小翔哥与cplusplus,文章同步更新~

048206f17a9fbb636d79485b64a3b67a.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值