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程序用来创建类的 ...
随机推荐
- Kubernetes-dns 域名解析问题
问题描述:nginx不能解析域名,但是使用nslookup却可以解析域名 ./sbin/nginx -t nginx: [emerg] host not found in upstream " ...
- 20165318 2017-2018-2 《Java程序设计》第五周学习总结
20165318 2017-2018-2 <Java程序设计>第五周学习总结 学习总结 在使用IDEA时,由于我之前编写的代码都是使用GBK编码,使用IDEA打开时,由于IDEA默认为UT ...
- [USACO09MAR]Moon Mooing
嘟嘟嘟 某谷的翻译挺迷的,简单来说就是给一个初值c,然后有两个函数f1 = a1 * x / d1 + b1, f2 = a2 * x / d2 + b2.把c分别带进去,所得的结果也递归带进去,这样 ...
- AE-----合成
AE-----合成 大纲:
- 课后实践之mybash20155314
课后实践之mybash 实践要求 加分题-mybash的实现 使用fork,exec,wait实现mybash 写出伪代码,产品代码和测试代码 发表知识理解,实现过程和问题解决的博客(包含代码托管链接 ...
- 测试html报告 github python3版本
github源码下载地址:https://github.com/huilansame/HTMLTestRunner_PY3/archive/master.zip 解压后进入文件找到文件:HTMLTes ...
- 火狐下不能使用非行间样式currentStyle用getComputedStyle获取
用js的style属性可以获得html标签的样式,但是不能获取非行间样式.那么怎么用js获取css的非行间样式呢?在IE下可以用currentStyle,而在火狐下面我们需要用到getComputed ...
- 【转】Autofac高级用法之动态代理
原文:http://www.cnblogs.com/stulzq/p/8547839.html 前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下 ...
- (收藏)mci 录音和播放
原文http://blog.csdn.net/lvbian/article/details/18226741 最近在做Android与C#录音并互相通信的小东西.但是卡在C#录音这儿了.找了好久,说的 ...
- springboot热部署(一)——Java热部署与热加载原理
一.概述 在应用运行的时升级软件,无需重新启动的方式有两种,热部署和热加载. 对于Java应用程序来说, 热部署就是在服务器运行时重新部署项目,——生产环境 热加载即在在运行时重新加载class,从而 ...