C++ Primer的变量和基本类型详解

目录
  • 1.类型转换
    • 含有无符号类型的表达式
  • 2.字面值常量
    • 整形和浮点型字面值
    • 字符和字符串字面值
    • 转移序列
    • 指定字面值的类型
    • 布尔字面值和指针字面值
  • 总结

1.类型转换

对象的类型定义了对象能包含的数据和能参与的运算,其中一种运算被大多数类型支持,就是将对象从一种给定的类型转换为另一种相关类型。
比如

  • 把非布尔类型的数据赋值给布尔类型时,初始值为0则结果为false,否则为true;
  • 将布尔值赋值给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1;
  • 将浮点数赋给整数类型时,结果值将仅保留浮点数中小数点之前的部分;
  • 将整数值赋给浮点类型时,小数部分记为0,如果证书所占的空间超过浮点类型的容量,精度可能有缺失;
  • 当赋给无符号类型一个超出它表示范围的值时,结果是初始值对于无符号类型表示数值总数取模之后的余数,比如:
unsigned char c = -1   // 假设char占8比特,结果为255
                       // -1 的二进制表示为 11111111 化为十进制为255
  • 当我们赋给带符号类型一个超出他表示范围的值时,结果是未定义的。程序可能继续工作,也可能崩溃。

当程序在某处使用了一种算术类型的值单数所需要的是另外一种类型的值时,编译器便会执行类型转换。

含有无符号类型的表达式

当一个算数表达式中既有无符号数又有int值时,int值会转换成无符号数(如果表达式中既有带符号类型又有无符号类型,带符号数会自动地转换成无符号数):

unsigned u = 10;                 // unsigned 为 unsigned int简写
int i = 42;
std::cout << u + i << std::endl;  // 若int占32位,输出为4294967264

注意:无符号数不会小于零,以下for循环为死循环

for(unsigned u = 10;u>=0;--u)
    std::cout << u << std::endl;

2.字面值常量

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

整形和浮点型字面值

整型字面值可以写成。

20 /*十进制数*/     024 /*八进制数*/      0x14 /*十六进制数*/

整型字面值具体的数据由它的值和符号决定,(尽管整型字面值可以存储在带符号数据类型中,但严格来说,十进制字面值不会是负数,因为符号不在字面值之内,它的作用仅仅是对字面值取负值而已)

浮点型字面值表现为一个小数或科学计数法表示的指数,其中指数部分用E或e标识(3.14159,3.14159E0)

字符和字符串字面值

有单引号括起来的一个字符称为char型字面值,双引号括起来的零个或多个字符则构成字符串型字面值。

'a'
"Hello world!"

字符串字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串的结尾处添加一个空字符(’\0’),因此,字符串字面值的实际长度要比它的内容多一。

小技巧:若两个字符串位置紧邻且仅由空格、缩进和换行符分隔,它们实际上是一个整体:

std::cout << "a really, really long string literal "
             " that spans two lines " << std::endl;

转移序列

在C++中有两类字符程序员不能直接使用:

第一类是不可打印的字符,如退格或其他控制字符,因为它们没有可视的图符;

第二类式C++语言中有特殊含义的字符。

指定字面值的类型

通过添加前缀或者后缀,可以改变整型、浮点型和字符型字面值的默认类型。

u8"hi!"    // utf-8字符串字面值
1E-3F      // 单精度浮点型字面值,类型是float
3.14159L   // 扩展精度浮点型字面值,类型为long double

布尔字面值和指针字面值

truefalse是布尔类型的字面值;

nullptr是指针字面值。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • 《C++ primer plus》读书笔记(一)

    第一章 1.预处理器--#include<iostream>将iostream文件内容添加到程序中.老式C头文件保留了扩展名.h,而C++头文件没有扩展名. (有些C头文件被转换为C++头文件,去掉扩展名,并在前面加c,如cmath) 2.名称空间--相当于Java中的package,using编译指令相当于Java中的import.头文件没有.h前缀时,类.函数和变量是C++编译器的标准组件,被放置在名称空间std中. 3.类的本质--类是用户定义的一种数据类型.类定义描述的是数据格式及其用

  • c++primer类详解

    目录 1. 定义抽象数据类型 1.1 设计Sales_data类 1.2 定义类相关的非成员函数 1.3构造函数 1.4 拷贝.赋值和析构 2 访问控制和封装 2.1 友元 2.2 类的其他特性 2.2.1 类成员再探 2.2.2 返回*this的成员函数 2.2.3 类类型 2.2.4 友元再探 2.4 类的作用域 2.4.1 名字查找和类的作用域 2.5 构造函数再探 2.5.1 2.5.2 委托构造函数 2.5.3 默认构造函数的作用 2.5.4 隐式的类类型转换 2.5.5 聚合类 2.

  • 《C++ primer plus》读书笔记(三)

     第九章 1.C++程序的组成-- (1).头文件: 包含结构声明和使用这些结构的原型. (2).源代码文件: 包含与结构有关的函数的代码. (3).源代码文件: 包含调用与结构有关的函数的代码. 2.头文件-- (1).常包含的内容: 函数原型:#define或const定义的符号常量:结构声明:类声明:模板声明:内联函数. (2).若文件名包含在尖括号中,编译器将在存储标准头文件的主机系统的文件系统中查找. (3).若文件名包含在双引号中,编译器首先查找当前的工作目录或源代码目录,再在标准位

  • c++primer:变量和基本类型详解

    目录 前言 类型转换 变量声明与定义的关系 变量命名规范 复合类型 引用 指针 const限定符 const的引用 指针和const constexpr和常量表达式 auto类型说明符 decltype 头文件保护符 习题 练习 总结 前言 我只写我觉得重要的,同时把一些我觉得比较重要的习题做一下 类型转换 类型所能代表的范围决定了转换的过程 比如:当我们把一个非布尔类型的算数值赋给布尔类型时,初始值为0则代表结果为false,否则结果为true 当把浮点数赋给整数时,会舍去小数部分. 当赋给无

  • 《C++ primer plus》读书笔记(二)

    第五章 1.for循环--for(initialization; test-expression; update-expression) body // test-expression 会被转换为bool,0为false,非零为true 2.表达式--表达式是值或值与运算符的组合.赋值表达式的值为其左侧成员的值,而赋值运算符是从右到左结合的. 3.a++和++a-- (1)对于内置类型,两种执行效率相同. (2)若重载运算符,对于类而言,前缀将值加1,返回结果:后缀会复制一个副本,加1后返回副本

  • C++ Primer的变量和基本类型详解

    目录 1.类型转换 含有无符号类型的表达式 2.字面值常量 整形和浮点型字面值 字符和字符串字面值 转移序列 指定字面值的类型 布尔字面值和指针字面值 总结 1.类型转换 对象的类型定义了对象能包含的数据和能参与的运算,其中一种运算被大多数类型支持,就是将对象从一种给定的类型转换为另一种相关类型.比如 把非布尔类型的数据赋值给布尔类型时,初始值为0则结果为false,否则为true: 将布尔值赋值给非布尔类型时,初始值为false则结果为0,初始值为true则结果为1: 将浮点数赋给整数类型时,

  • C++变量和基本类型详解

    目录 基本内置类型 1. 不同平台下基本类型的字节数 2. 算数类型的最小尺寸 3. 数据类型选择的经验准则 4. 有符号类型和无符号类型 5.初始化与赋值 6. 声明与定义 7. C++关键字 8.1 初始化 8.2 const引用 8.3 const与指针 小结: 9. constexpr 和常量表达式 10. 处理类型 总结 基本内置类型 算术类型分为两类:整型(包括字符和布尔类型在内)和浮点型 1. 不同平台下基本类型的字节数 类型 16位平台 32位平台 64位平台 char 1 1

  • Python 变量类型详解

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符. 变量赋值 Python 中的变量赋值不需要类型声明. 每个变量在内存中创建,都包括变量的标识,名称和数据这些信息. 每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 等号(=)用来给变量赋值. 等号(=)运算符左边是一个变量名,等号(=)运算符右边是存储在变量中的值. 例

  • Javascript类型系统之String字符串类型详解

    javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串String是javascript基本数据类型,同时javascript也支持String对象,它是一个原始值的包装对象.在需要时,javascript会自动在原始形式和对象形式之间转换.本文将介绍字符串String原始类型及String包装对象 定义 字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列 字符串类型常被用于表示文本数据,此时字符串中的

  • Java基本数据类型与封装类型详解(int和Integer区别)

    int是java提供的8种原始数据类型之一. Java为每个原始类型提供了封装类,Integer是java为int提供的封装类(即Integer是一个java对象,而int只是一个基本数据类型).int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer.在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字

  • Python的语言类型(详解)

    Python 是强类型的动态脚本语言 . 强类型:不允许不同类型相加 动态:不使用显示数据类型声明,且确定一个变量的类型是在第一次给它赋值的时候 脚本语言:一般也是解释型语言,运行代码只需要一个解释器,不需要编译 强类型语言和弱类型语言 1.强类型语言:使之强制数据类型定义的语言.没有强制类型转化前,不允许两种不同类型的变量相互操作.强类型定义语言是类型安全的语言,如Java.C# 和 python,比如Java中"int i = 0.0;"是无法通过编译的: 2.弱类型语言:数据类型

  • javascript类型系统_正则表达式RegExp类型详解

    前面的话 前面已经介绍过javascript中正则表达式的基础语法.javascript的RegExp类表示正则表达式,String和RegExp都定义了方法,使用正则表达式可以进行强大的模式匹配和文本检索与替换.本文将介绍正则表达式的RegExp对象,以及正则表达式涉及 到的属性和方法 对象 javascript中的正则表达式用RegExp对象表示,有两种写法:一种是字面量写法:另一种是构造函数写法 Perl写法 正则表达式字面量写法,又叫Perl写法,因为javascript的正则表达式特性

  • Java多线程Atomic包操作原子变量与原子类详解

    在阅读这篇文章之前,大家可以先看下<Java多线程atomic包介绍及使用方法>,了解atomic包的相关内容. 一.何谓Atomic? Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位.计算机中的Atomic是指不能分割成若干部分的意思.如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的.通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成) 在x86平台上,CPU提供了在指令执行期间对总线加锁的手段.

  • 基于java变量和作用域以及成员变量的默认初始化(详解)

    ava中的变量有成员变量和局部变量,定义在类中方法之外的变量成为成员变量或者成员字段(域),表示一个类所具有的属性,定义为类的成员变量的变量的作用于是整个类,该变量在定义的时候不需要初始化,在使用前java会自动初始化成员变量,对于基本数据类型的的自动初始化如下: java基本类型默认初始化值 int 0 short 0 byte 0 long 0 float 0.0 double 0.0 boolean false char 0 例如: public class test{ private i

随机推荐