语言学习c++——内置基本类型
Posted SzxTNU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语言学习c++——内置基本类型相关的知识,希望对你有一定的参考价值。
数据类型决定了程序中数据和操作的意义
内置基本类型
c++定义了一套包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。
算数类型包括了字符型,整型数,布尔值和浮点数;
空类型不对应具体的值,应用于一些特定的场合,最常见的类型是当函数不返回 任何值时,使用空类型作为返回类型
2.1.1算术类型
数据类型的几个要点
算数类型分为整型(integral type,包括字符和布尔类型在内)和浮点型
算术类型的尺寸,也就是该类型数据的bit数在不同的机器上有所差别。
c++提供了几种字符类型,大多数支持国际化,基本的字符类型使char,一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,也就是说,一个char的大小和一个机器字节一样
除字符和布尔类型之外,其他整型用于表示不同尺寸的整数。c++中规定,一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long 至少和一个long一样大。
内置类型的机器实现
大多数计算机以2的整数次幂个bit作为块来处理内存,可寻址的最小内存块成为“字节”(byte),存储的基本单元叫做字,字通常由几个字节组成。大多数机器中,一个字节由8个bit组成,字则有32bit或64bit构成,也就是4字节或8字节
带符号类型和无符号类型
除去布尔型和扩展的字符型之外,其他整型可以分为带符号的(signed)和不带符号的(unsigned)两种。带符号的能表示正数负数和0,而不带符号的只能表示大于0的数。在int、long、long long都是带符号的,在这些类型前面加上unsigned就可以变成无符号类型。 其中,unsigned int 可以简写为 unsigned
c++没有规定带符号类型应如何表示,但是约定了在表示范围内正值和负值的量应该平衡
选择数据类型的准则
明确知晓数值不可能为负的时候,应该选择无符号型
在实际运用中,long一般和int差不多大,所以超了int的范围之后,一般都选用long long
在算数表达式中,一般不用bool型和char型
执行浮点数运算的时候一般选用double,因为float的精度不够而且双精度和单精度的计算代价基本没啥区别
2.1.2类型转换
类型转化其实是一种运算。
❗注
当把一个非bool型的算数值赋给一个bool型的变量时,初始值为0则为false,否则为true;
当我们把一个bool型的赋值给非bool型,初始值为false则结果为0,初始值为true则结果为1;
当我们把一个浮点数赋给整数类型,结果只保留整数部分;
当我们把一个整数值赋给浮点数,小数部分记0。如果该整数所占的空间超过了浮点类型的容量,精度可能损失;
给无符号类型赋一个超过它范围的数,结果是初始值对无符号类型表示的数值总数mod之后的余数;
当我们赋给带符号类型一个超出他表示范围的值,结果是未定义的。
如果我们使用了一个非bool值作为i条件,那么它会被自动转换为bool值
含有无符号类型的表达式
当一个表达式中既有无符号数又有int类型的数字时,那个int值就会转换成无符号数。特别的,无符号数中-1代表整个无符号数代表的最大值。例如,int的范围是0-4294967295,那么-1就是4294967295.当从无符号数中减去一个值,不管这个值是不是无符号数,我们都必须确保结果不是负数。
无符号数不会小于0的事实关系到循环的写法,如果用无符号数来写循环的话,可能会导致死循环。
2.1.3 字面值常量
一个形如42的值被称作字面值常量,每个字面值常量都对应着一种数据类型,字面值常量的值和形式决定了他的数据类型。
整型和浮点数字面值
字面值通常指的是无需变量保存,可直接表示为一个具体的数字或字符串的值。
整型字面值可以写作十进制、十六进制、八进制。
20 (十进制) 024(八进制) 0x14(十六进制)
以0开头的代表8进制,以0x或0X开头的代表十六进制
整型字面值具体的数据类型由符号和值决定,十进制字面值通常是带符号数,八进制和十六进制不好说。
严格来说,十进制字面值不会是负数,如果发现了有个形如-42的字面值,那么那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已
字符和字符串字面值
由单引号括起来的一个字符成为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值
'a' //字符字面值
"Hello World!" //字符串字面值
字符串字面值的类型实际上是由常量字符构成的数组,由于末尾的反斜杠0,所以实际值比内容多1.
书写的字面值比较长的时候,可以采用分开书写的方式
转义序列
有两类字符程序员不能直接使用,一类是不可打印字符,如退格或其他控制字符,因为没有可视的图标;另一类是在C++中有特殊含义的字符,如单引号,双引号, 问号,反斜线。在这些情况下需要用到转义序列。
换行符 | \n | 横向制表符 | \t | 报警符 | \a |
---|---|---|---|---|---|
纵向制表符 | \v | 退格符 | \b | 单引号 | \' |
回车符 | \r | 进纸符 | \f |
在程序中,这些转义序列被当作一个字符使用。
我们也可以使用泛化的转义序列,形式是\x后紧跟一个或多个十六进制数组,或者\后紧跟1个、2个或3个八进制数。数字部分表示的是字符对应的数值。其中,若\后跟的八进制数字多于三个,只有前三个数组与反斜杠构成转义序列
指定字面值的类型
通过添加前缀,后缀,可以改变整型、浮点型、字符型字面值的默认类型。
对于一个整型字面值来说,我们能分别指定它是否带符号以及占用多少空间,如果后缀中有U,则该字面值属于无符号类型。
布尔字面值和指针字面值
true 和false 是布尔类型的字面值
bullptr是指针字面值
以上是关于语言学习c++——内置基本类型的主要内容,如果未能解决你的问题,请参考以下文章