c++primer 2.1.1 算数类型

2.1.1 算术类型

分为两类:整型(包括字符和布尔类型)和浮点型

算术类型

类型 含义 最小尺寸 bool 布尔类型 未定义 char 字符 8位 wchar_t 宽字符 16位 char16_t Unicode字符 16位 char32_t Unicode字符 32位 short 短整型 16位 int 整型 16位 long 长整型 32位 long long  长整型 64位 float 单精度浮点数 6位有效数字 double 双精度浮点数 10位有效数字 long double 扩展精度浮点数 10位有效数字

布尔类型的取值是真或假

基本的字符类型是char,一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,也就是说,一个char的大小和一个机器字节一样。

Unicode字符集采用定长编码,无论是英文还是汉字,都是两个字节储存一个字符。

浮点型可表示单精度,双精度和扩展精度值。

执行浮点数运算时选用double,因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。

在算术表达式中不要使用char或bool,只有在存放字符或布尔值时才使用它们。因为类型char在一些机器上是符号,而在另一些机器上是无符号的。


扩展:字符集和字符编码

早些时候,英语字符与二进制位之间的关系做了统一规定,并制定了一套字符编码规则,这套编码规则被称为ASCII编码,用七位二进制表示。但是用来表示其他语言,这套编码就不够用了,出现非ASCII编码。不同的国家有不同的字母,因此,哪怕它们都使用256个符号的编码方式,代表的字母却不一样。比如,130在法语编码中代表了é,在希伯来语编码中却代表了字母Gimel (ג),在俄语编码中又会代表另一个符号。但是不管怎样,所有这些编码方式中,0--127表示的符号是一样的,不一样的只是128--255的这一段。

为了解决这一问题,出现编码Unicode,Unicode 是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。但是值得注意的是Unicode 只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。于是出现了不同的编码规则,如UTF-8、UTF-16、UTF-32 。
————————————————

原文链接:https://blog.csdn.net/Deft_MKJing/article/details/79460485


内置类型的机器实现

内置类型(也称基本类型)由 C++ 语言标准指定,内置于编译器中。 内置类型未在任何头文件中定义。 内置类型分为三个主要类别:整型、浮点和 void。

计算机以比特序列储存数据,每个比特非0即1.大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为“字节(byte),储存的基本单元称为”字(word)”,它通常又几个字节组成。大多数机器的字节由8比特构成,字则由32或64比特构成,也就是4或8字节。

大多数计算机将内存中的每个字节与一个数字(被称为地址)关联起来,在一个字节为8比特,字为32比特的机器上我们可能看到一个字的内存区域如下所示

736424 0 0 1 1 1  0 1 1 

左侧为字节的地址,右侧是字节8比特的具体内容(类似门牌号和租客)

类型决定了数据所占比特数以及该如何解释这些比特的内容。如果位置736424处的对象类型是float,并且该机器中float以32比特储存,那么我们就能知道这个对象的内容占满了整个字。这个float数实际值依赖于该机器是如何储存浮点数的。


带符号类型和无符号类型

除去布尔型和扩展的字符型除外,其他整型可以划分为带符号(signed)的和无符号(unsigned)的l两种。带符号类型可以表示正数,负数或0,无符号类型则仅能表示大于等于0的值。

类型int,short,long和long long都是带符号的,通过在这些类型前面加unsigned可以得到无符号类型。无符号整型一般是常用于各种位运算、模运算、回绕溢出利用较多的算法实现中(比如各种加密学算法、编码、压缩算法等),或者是确实对数据表示范围有要求的场合。

与其他整型不同,字符型被分为了三种:char,signed char,unsigned char。

类型char和类型signed char并不一样,在不同编译器中char的默认定义不同,例如VC编译器、x86上的GCC都把char定义为signed char,而arm-linux-gcc却把char定义为 unsigned char。

尽管字符型有三种,但是字符的表现形式却只有两种:带符号的和无符号的。

无符号类型中所有比特都用来储存值,如,8比特的unsigned char可以表示0-255区间的值,signed char取值范围是 -128 到 127(有符号位)。

练习2.1

类型int,long,long long和short的区别是什么?无符号类型和带符号类型的区别是什么?float和double的区别是什么?

答:都为整数型,该类型在内存中所占的比特数不同,分别为 16,32,64,16比特。

      带符号类型可以表示正数,负数或0,无符号类型则仅能表示大于等于0的值。

     内存中所占比特数不同,默认的有效位数不同。

练习2.2

计算按揭贷率时,对于利率,本金和付款分别选择何种数据类型?说明理由

答:利率:double  本金:double  付款:double

可能有小数,选择浮点类型,float通常精度不够,double与float计算代价相近但范围更广,long double计算代价太大。

你可能感兴趣的:(c++,primer,c++,开发语言,学习,笔记)