C++ primer 基本类型

数据类型决定了程序中数据和操作的意义

(类型决定了数据所占比特数以及该如何解释这些比特的内容)


基本内置类型

一、算术类型

 1.   算数类型
             整型

                     字符型,整型数,布尔类型 
             浮点型

        空类型
             不对应具体的值,仅用于一些特殊场合

除字符和布尔类型之外,其他整型用于表示(可能)不同尺寸的整数

C++提供了几种字符类型,char, wchar_t, char16_t, char32_t,其中基本字符类型是char
C++语言规定,一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。

long long是C++11中新定义的。

可寻址的最小内存块称为 “字节”,存储的基本单元称为 “字”;
大多数机器的字由8比特构成,字则由32或64比特构成,也就是4或8个字节

2.浮点型可表示
        单精度值
        双精度值
        扩展精度值

3.大多数整型可分为带符号类型和无符号类型(带符号类型可以表示:正数、负数、0, 无符号类型则仅能表示:非负数)
       带符号类型
            int, short, long, long long等
       无符号类型
            在带符号类型名前添加unsigned就可以得到无符号类型。如 unsigned long。 unsigned int 可缩写为unsigned

与其他类型不同,虽然字符型被分为了三种:char ,signed char 和 unsigned char。但是字符表现形式却只有两中:带符号类型和无符号类型。 类型char和signed char并不一样,char实际上会由编译器决定称为上述两种类型中的一种。




二、类型转换

        对象的类型定义了对象能包含的数据和能参与的运算。大多数类型都支持类型转换,当在程序的某处我们使用了一种类型而其实对象应该取另一种类型时,程序会自动进行类型转换

  1.类型所能表示的值的范围决定了转换的过程

        1.把非布尔类型的算术值赋给布尔类型时,初始值为0,结果为false,否则为true
        2.把布尔类型的值赋给非布尔类型时,初始值为false,结果为0,初始值为true,结果为1
        3.把浮点数赋给整数类型时,进行了近似处理,结果值将仅保留浮点数中小数点之前的部分
        4.把整数值赋给浮点类型时,小数部分记为0,。如果该整数所占的空间超过了浮点类型的容量,精度可能会有损失。
        5.赋给无符号类型一个超出了它表示范围的值时,结果是初始值对无符号类型表示值总数 (2的比特数次方) 取模后的余数
        6.赋给带符号类型一个超出它表示范围的值时,结果是未定义的,此时程序可能工作,可能崩溃,也可能产生垃圾数据


   2. 含有无符号类型的表达式
            当一个算术表达式中既有无符号数,又有int值时,那个int值就会转换成无符号数。把int转换成无符号数的过程和把int直接赋给无符号变量一样(把负数转换成无符号数类似于直接给无符号数赋一个负值,结果等于这个负数加上无符号数的模)
            当从无符号书中减去一个值时,如果是负数,则该负数会转换成无符号数。

    提示:切勿混用带符号类型和无符号类型


三、字面值常量

       每个字面值常量都对应一种数据类型,字面值常量的形式和值决定了它的数据类型

    1.整型和浮点型字面值

          可以将整型字面值写作十进制,八进制,十六进制数的形式。

            以0开头表示八进制
            以0x或0X开头表示十六进制

        整型字面值具体的数据类型由他的值和符号决定的。默认情况下,十进制字面值是带符号的,八进制和十六进制字面值既可能带符号也可能是无符号。尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数。(如果我们用一个形如-42的负十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负值而已)
        浮点型字面值表现为一个小数或以科学计数法表示的指数,其中指数部分用E或e标识:3.14, 3.14159E0
        默认情况下浮点型字面值是一个double

        类型short没有与之对应的字面值


    2.字符和字符串字面值

        由单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值
字符串型的字面值实际上是由常量字符构成的数组(array),编译器在每个字符串的结尾处添加一个空字符(‘\0’),因此,字符串的字面值实际长度要比它的内容多1

       
如果两个字符串字面值位置紧邻且仅由空格,缩进和换行符分隔,则它们实际上是一个整体。(当字符串字面值比较长,写在一行里不太合适时,就可以采取分开书写的方式)


    3.转义序列
        转义序列均以反斜线作为开始。C++规定的转义序列(见C++ primer 5th p36)

    4.指定字面值的类型
       通过添加前缀后缀,可以改变整型,浮点型和字符型字面值的默认类型(表见 C++ primer 5th p37)
        当使用一个长整型字面值时,请使用大写字母L来标记,因为小写字母l和数字1太容易混淆了

    5.布尔字面值和指针字面值
        true和false是布尔类型的字面值,nullptr是指针类型的字面值。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值