变量和基本类型之第一篇:基本内置类型和变量

一、

(1)

C++定义了一套包括算数类型和空类型,这些类型有:布尔类型bool,字符类型char,宽字符类型wchar_t,Unicode字符char16_t,Unicode字符char32_t,短整型short(int),

整形int,长整形long(int),长整形long long(int),单精度浮点型float,双精度浮点型double,扩展精度浮点数long double。

其中,wchar_t、char16_t、char32_t用于扩展字符集。wchar_t确保可以存放机器最大扩展字符集中的任意一个字符,类型char16_t和char32_t则为Unicode字符集服务(Unicode是用于表示所有自然语言中字符的标准)。

对于整形,C++语言规定:一个int至少应该和short int一样大,一个long应该至少和int一样大(在32位的机器上两者通常是一样大的),一个long long int至少和一个long一样大(long long int 是在C++ 11中新定义的)。

内置类型的机器实现:

计算机以比特序列存储数据,每个比特非0即1。大多数计算机以2的整数次幂个比特作为块来处理内存,可寻址的最小内存块称为"字节(byte)",存储的基本单元称为"字(word)",通常有几个字节组成。C++中,一个字要至少能容纳机器基本字符集中的字符。大多数机器的字节由8个比特组成,字则由4个字节或8个字节组成。计算机将内存中的每个字节与一个数字(地址)关联起来。

浮点型可表示单精度、双精度和扩展精度值,C++标准定义了一个浮点数的有效位数的最小值。通常,float以1个字节(32byte)来表示,double以两个字来表示,long double以3个或4个字来表示。float和double分别有7个和16个有效位。

(2)类型转换

把其他类型的值转换为bool值的时候,当值为0时bool为false,当值不为0时bool等于true;把一个bool值转换为整型时,true被翻译为1,false被翻译为0;把浮点数赋值给整形时,仅保留小数点之前的值;把一个整型值赋值给浮点型时,小数部分记0;当给一个无符号类型赋值一个超出它表示的类型时,结果是初始值对无符号类型表示数值总数取模后的余数。例如,unsigned char可以表示0~255区间的值,如果把-1赋值给一个unsigned char类型变量,则实际的结果时该值对256取模后的余数,为255。

例如:

unsigned u = 10;
int i = 42; // 输出84
std::cout << i + i << std::endl; // 如果int占32位,输出4294968264
std::cout << u + i << std::endl;

在第一个输出表达式里,两个负整数类型一样,相加得到了期望的结果,而第二个表达式在相加前,先把整型-42转换为无符号数,把负数转换成无符号数结果等于这个负数加上这个无符号数的模。

另外,当从无符号数中减去一个值时,不管这个值是不是无符号数,我们都必须保证结果是一个无符号数。

二、字面值常量

每个字面值常量都对应了一种数据类型。

这三个数分别用十进制、八进制和十六进制来表示了整型字面值常量20:

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

对于浮点型字面值常量,默认为double型。

'a'
/* 字符字面值 */

"a"
/* 字符串字面值 */

字符串字面值的类型实际上是由常量字符构成的数组,字符串由'\0'结尾,因此数组的长度也要至少比字符串字面值的长度大1。

std::cout << "hello world"
"I love you"
<< std::endl;

另外,字符串字面值可以分多行书写,如果两个字符串字面值位置紧邻且仅有空格、缩进和换行符分隔,则它们实际上是一个整体。

我们还可以指定字面值类型,比如:L‘a’  /* 宽字符字面值 */

三、变量

C++在定义变量时赋值叫初始化,在定义之后再赋值才算真正的赋值,所以赋值和初始化并不一样。初始化的含义是创建变量是赋予其一个初始值,而赋值的含义是把对象的当前的值擦除,用一个新值来替代。

C++初始化方式:

inthello
=0;

inthello
={0};

int hello(0);

int hello{0};

最后一种是C++11的新标准,列表初始化。

默认初始化:

定义在函数内部、块内部的内置变量,不予以默认初始化,定义在全局中的变量被默认初始化为0。

变量可以声明多次,但只能被定义一次。

extern int i;     // 声明i而非定义i

int j;// 声明j并定义j

通常,我们在第一次使用变量的地方再定义它是一种比较好的选择。

C++ Primer : 第二章:变量和基本类型(1)的更多相关文章

  1. <<C++ Primer>> 第二章 变量和基本类型 术语表

    术语表 第 2 章 变量和基本类型 地址(address): 是一个数字,根据它可以找到内存中的一个字节    别名生命(alias declaration): 为另一种类型定义一个同义词:使用 &q ...

  2. C++ Primer 笔记(2)第二章 变量与基本类型

    第二章 变量与基本类型 1.基本内置类型包括算术类型和空类型,算术类型分为两类:整型(包括字符和布尔类型)和浮点型: 2.布尔类型(bool)的取值是真(true)或者假(false): 3.字面值常 ...

  3. 《C++ Primer》读书笔记—第二章 变量和基本类型

    声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-12 ...

  4. C++ Primer 读书笔记 第2章 变量和基本类型

    C++ Primer 第二章 变量和基本类型 2.1 基本内置类型 C++定义了一组表示整数.浮点数.单个字符和布尔值的算术类型(arithmetic type),此外还定义了Void类型. 算术类型 ...

  5. C++ Primer 第2章 变量和基本类型

    C++ Primer 第2章 变量和基本类型 C Primer 第2章 变量和基本类型 1 基本内置类型 算数类型 类型转换 字面值常量 2 变量 变量定义 3 复合类型 引用d左引用 指针d 4 c ...

  6. C++PRIMER第二章前半部分答案

    C++PRIMER第二章前半部分答案 哈哈哈,为什么是前半部分呢,后半部分还在学习中,重新系统性的学习c++,共同进步嘛,不多说,跟我一起来看看吧,第三章开始才是新手收割的时候,慢慢来~~ 2.1&a ...

  7. Java 第二章 变量

    第二章 变量 变量称为:是计算机语言中能储存计算机结果或能表示值抽象概念 .变量可以通过变量名访问 int money ; //变量 money=1000; //赋值 int money=1000: ...

  8. Java 第二章 变量、数据类型和运算符

    第二章      变量.数据类型和运算符 什么是变量: 变量代表一块内存区域,变量类型不一样,这一块内存的大小也不一样. #在编程语言里面,你可以通过定义变量,向内存里添加数据或者修改内存已有的数据. ...

  9. C++primer第二章

    第二章 :变量和基本类型 2.1 基本内置类型 C++定义了一套包含算术类型(arithmetic type)和空类型(void)在内的基本数据类型 2.1.1 算术类型 算术类型的分类: 整型(in ...

随机推荐

  1. STL 自学

    STL 一.vector动态数组 1 包含头函数 #include<vector> 2 函数的声明: vector<int> v; vector<int> v[ma ...

  2. Linux的三种特殊权限

    1.Suid Set位权限 ●对文件以文件的拥有者身份执行文件 ●对目录无影响 权限设置: ●suid=u+s 2.Sgid Set位权限 ●对文件以文件的组身份执行文件 ●对目录在目录中最新创建的文 ...

  3. Android ViewPager 里有子ViewPager的事件冲突

    在Android应用中有时候要用到类似网易新闻左右滑动页面且页面里又有左右滑动的图片功能,我不知道网易是怎么实现的,本人的做法是外面的BaseFragmentActivity布局就是TabViewPa ...

  4. DotNetBar v12.5.0.2 Fully Cracked

    更新信息: http://www.devcomponents.com/customeronly/releasenotes.asp?p=dnbwf&v=12.5.0.2 如果遇到破解问题可以与我 ...

  5. [windows驱动]内核态驱动架构

    1.windows驱动简介: 1.1 windows组件简介: 1.2 windows驱动类型: windows驱动分为两种基本类型: 用户态驱动在用户态下执行.它们一般提供一套win32应用程序和内 ...

  6. winform错误提示 :窗口类名无效(Window class name is not valid)

    winfrom 程序在 xp 操作系统上报错提示 窗口类名无效(Window class name is not valid) 解决方法 注释 Program类 里 这句 Application.En ...

  7. Oracle普通索引,唯一索引,主键的区别

    索引是我们经常使用的一种数据库优化手段,适当的业务操作场景使用适当的索引方案,可以显著的提升系统整体查询性能,当然用户体验也随之提高. 在Oracle中,唯一性索引(Unique Index)是我们经 ...

  8. 转载一篇文章 python程序员经常犯的10个错误

    一位同事推荐的.翻译的不错. http://www.oschina.net/translate/top-10-mistakes-that-python-programmers-make

  9. iOS常用设计模式:MVC、单例、代理、观察者。

    MVC 模型-视图-控制器(MVC)设计模式 MVC根据角色划分类,涉及到三个角色: Model:模型保存应用程序的数据. View:视图是模型的可视化表示以及用户交互的控件. Controller: ...

  10. Storyboard的使用以及使用多个Storyboard的方法

    一, storyboard用起来很是方便.在开发中很有可能是多个人创建了多个storyboard.但最后,总是要把所有的storyboard“合并”在一起.总结一下自己的想法,不知道有没有其他的方式“ ...