C++ 学习笔记 变量和基本类型(一)
C++ 学习笔记
一、变量和基本类型概述
类型是所有程序的基础。类型告诉我们数据代表什么意思以及可以对数据执行哪些操作。
c++基本类型:
- 字符型
- 整型
- 浮点型
c++ 还提供了可用于自定义数据类型的机制,标准库正式利用了这些机制定义了许多更复杂的类型,比如可变长字符串string 和vector等。此外,我们还能修改已有的类型以形成复合类型。
二、基本内置类型
- 算数类型:表示整数、浮点数、单个字符和布尔值的类型。
- void类型:void类型没有对应的值,仅用在有限的一些情况下,通常用作无返回值函数的返回类型。
下面详细介绍。
C++算数类型
| 类型 | 含义 | 最小存储空间 |
|---|---|---|
| bool | 布尔型 | - |
| char | 字符型 | 8位 |
| wchar | 宽字符型 | 16位 |
| short | 短整型 | 16位 |
| int | 整型 | 16位 |
| long | 长整型 | 32位 |
| float | 单精度浮点型 | 6位有效数字 |
| double | 双精度浮点型 | 10位有效数字 |
| long double | 扩展精度浮点型 | 10位有效数字 |
算数类型的存储空间依机器而定。这里的存储空间是指用来表示该类型的二进制位(bit)数。C++ 标准规定了每个算数类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。
注: 因为位数的不同,这些类型的所能表示的最大(最小)值也因机器的不同而有所不同。
2.1 整型:
表示整数、字符和布尔值的算数类型合成为整型 (integral type)
2.1.1 分类
整型按细分类型分为以下几个:
整数
a. short: 一般为半个机器字(word)长
b. int: 为一个机器字长
c. long: 为一个或两个机器字长
字符
a. char: 保证了有足够的空间,能够存储机器基本字符集中任何字符相应的值,因此char类型通常是单个机器字节(byte)
b. wchar_t: 用于扩展字符集,比如汉字和日语,这些字符集中的一些字符不能用单个char表示
布尔值
a. true: 任何非零的值都代表true
b. false: 0代表false
整型按是否带符号分为带符号和无符号类型:
- 带符号的(signed):可表示整数也可以表示负数(包括0)
- 无符号的(unsigned):只能表示大于或等于0的数
注:整型 int、short、long都默认为带符号型。要获得无符号型则必须指定该类型为unsigned,比如unsigned long。unsigned int 类型可以简写为unsigned,也就是说,unsigned后不加其他类型说明符意味着是 unsigned int。
char有三种不同的类型:普通char、unsigned char 和 signed char,虽然char有三种不同的类型,但是只有两种表示方式。可以使用unsigned char 或 signed char 表示 char 类型。
2.1.2 整型值的表示
无符号型中,所有的位都表示数值。如果在某种机器中,定义一种类型使用8位表示,那么这种类型的unsigned 型可以取值 0 到 255。
表示signed 整型类型最常见的策略是用其中一个位作为符号位。符号位为1,值就为负数;符号位为0,值就为0或正数。 一个使用一位符号位的表示方式的8位signed整型取值是从 -128 到 127。
2.1.3 整型的赋值
对象的类型决定对象的赋值。那当我们试着把一个超出其取值范围的值赋给一个指定类型的对象时,结果哦取决于这种类型是 signed 还是unsigned 的。
--- 对于 unsigned 类型来说,编译器必须调整越界值使其满足要求。编译器会将该值对unsigned 类型的可能取值数目求模,然后取所得值。另外对于unsigned 类型来说,负数总是超出其取值范围。unsigned 类型的对象可能永远不会保存负数。有些语言中将负数赋给unsigned 类型是非法的,但在C++ 中这是合法的,其结果是该负数对该类型的取值个数求模后的值。
--- 对于signed 类型来说,当将超过取值范围的值赋给signed 类型时,由编译器决定实际赋的值。
2.2 浮点型
类型 float 、double、long double 分别表示单精度浮点数,双精度浮点数和扩展精度浮点数。一般 float 类型用一个字(32位)来表示,double用两个字(64位)来表示,long double类型用三个或四个字(96或 128 位)来表示。类型的取值范围决定了浮点数所含的有效数字位数。
3. 字面值常量
像42 这样的值,在程序中被当做 字面值常量( literal constant),称之为字面值是因为只能用它的值来称呼它,称之为常量是因为它的值不能被修改。每个字面值都有相应的类型,例如: 0 是 int 型, 3.14159 是double 型。只有内置类型存在字面值,没有类类型的字面值。因此,也没有任何标准库类型的字面值。
3.1 整型字面值规则
定义字面值整数常量可以使用以下三种进制中的任一种:十进制、八进制和十六进制。当然这些进制不会改变其二进制位的表示形式。例如我们将值20定义成下列三种形式中的任意一种:
20 // decimal
024 // octal
0x14 // hexadecimal
字面值整数常量的类型默认为 int 或 long 类型。其精度类型决定于字面值 —— 其值适合 int 就是 int 类型,比 int 大的值就是 long 类型。
通过增加后缀,能够强制将字面值整数常量转换为 long 、unsigned 、或unsigned long 类型。通过在数值后边加 L 或者 l ,指定常量为 long 类型。(注:定义长整型时,应该使用大写字母L,避免混淆)
类似的,可以通过在数值后边加 U 或者u 定义 unsigned 类型。同时加 L 和 U 就能得到unsigned long 类型的字面值常量,但其后缀之间不能有空格。
例如:
128u // unsigned 1L // long
1024UL // unsigned long 8Lu // unsigned long
3.2 浮点字面值规则
通常可以用十进制或者科学计数法来表示浮点字面值常量。使用科学计数法时,指数用 E或 e 表示。默认的浮点字面值常量为 double 类型。在数值的后面加上 f 或 F 表示单精度。同样加上 L 或者 l 表示扩展精度。
3.3 非打印字符的转义序列
比如退格或控制符,还有一些在语言中有特殊意义的字符,比如单双引号、反斜线符号。不可打印字符和特殊字符都用转义字符书写。转义字符都以反斜线符号开始。
3.4 字符串字面值
字符串字面值常量用双引号括起来的零个或者多个字符表示。不可打印字符表示成相应的转义字符。
为了兼容C语言,C++ 中所有的字符串字面值都由编译器自动在末尾添加一个空字符。
字符串字面值的连接:两个相邻的仅由空格、制表符或换行符分开的字符串字面值(或宽字符串字面值),可连接成一个新字符串字面值。
3.5 多行字面值
在一行的末尾加一反斜线符号可将此行和下一行当做同一行处理。
C++ 学习笔记 变量和基本类型(一)的更多相关文章
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- Python学习笔记 变量
蒟蒻高举横幅:部分内容转自廖雪峰的Python教学 1.Python是动态语言,即它的变量是没有类型的. !/usr/bin/env python a = 'ABC' print a a = 123 ...
- Python学习笔记(三)——类型与变量
一.输入与输出 print("string"); print("string1","string2","string3" ...
- JavaScript学习笔记-基础语法、类型、变量
基础语法.类型.变量 非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1.用x != x ,当x为NaN时才返回true; 2.用isNaN(x) ,当x为NaN或 ...
- js权威指南学习笔记(一)类型、值和变量
1.数据类型:原始类型(primitive type) 和对象类型(object type) 原始类型包括数字.字符串和布尔值: 除数字.字符串.布尔值.null(空).undefined(未定义), ...
- JS学习笔记--变量类型
1.js数据类型分为基本数据类型和引用数据类型 基本数据类型:string.number.boolean.null.undefined.symbol(ES6中新增) 引用数据类型:object.arr ...
- VBA 学习笔记 - 变量与常量
学习资料:https://www.yiibai.com/vba/vba_variables.html 变量和常量命名规则 必须以字母开头 不能包含空格.句点(.).感叹号(!)或字符@,&,$ ...
- c语言学习笔记-变量、变量的命名、变量的赋值和变量的初始化
在学习了简单的输入输出功能和了解了一些基本的运算符号之后我们可以试着做一个非常简单的计算器. 比如说想计算23+65 输入以下代码就可以了. printf("23+65=%d",2 ...
- thinking in java学习笔记:14章 类型信息
14.2 Class 对象 https://github.com/zhaojiatao/javase 1.什么是Class对象,Class对象是用来做什么的? Class对象是java程序用来创建类的 ...
随机推荐
- JQuery $.axaj的基本格式
总是忘了,保存以备后用. $.ajax({ url: '', //请求的url地址 dataType: "json", //返回的格式为json async: true, //请求 ...
- jQuery 3D圆盘旋转焦点图 支持鼠标滚轮
之前我们分享过很多炫酷实用的jQuery焦点图插件了,今天介绍的这款jQuery焦点图非常特别,所有图片围成一个圆圈,组成一个立体视觉的圆盘,并且可以旋转选择圆盘中的图片.另外,这款jQuery 3D ...
- C++中重载决议与可访问性检查的顺序
http://blog.csdn.net/starlee/article/details/1406781 对于如下的类: class ClxECS{public: double Test(dou ...
- logstash 匹配日志格式
2017-05-15 12:06:17 INFO me.cinyi.imapp.push.commons.iospush - 用户ID[1000]-标识[11500], admin推送通知成功, ...
- 文件上传之MultipartFile使用
转载 文件断点上传,html5实现前端,java实现服务器 一.单/多文件上传使用例子: 工程路径如下 -src |--main.java --controller --service ...
- 多线程之ThreadLocal(转)
相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路:ThreadLocal的目的是为了解决多线程访问资源时的 ...
- Servlet 处理请求
一:Servlet 处理请求也是通过request来进行处理,类似于python. get请求通过request.getparameter("key");key为前端传过来的key ...
- 《Effective C++》item25:考虑写出一个不抛异常的swap函数
std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...
- iOS使用NSMutableAttributedString实现富文本小结
NSAttributedString NSAttributedString对象管理适用于字符串中单个字符或字符范围的字符串和关联的属性集(例如字体和字距).NSAttributedString对象的默 ...
- POJ 1151 Atlantis 矩形面积求交/线段树扫描线
Atlantis 题目连接 http://poj.org/problem?id=1151 Description here are several ancient Greek texts that c ...