C++学习 之 初识变量和基本类型 之 内置类型
声明:
本人自学C++, 没有计算机基础,在学习的过程难免会出现理解错误,出现风马牛不相及的现象,甚至有可能会贻笑大方。 如果有幸C++大牛能够扫到本人的博客,诚心希望大牛能给予批评与指正!不胜感激!
学习的过程分为初识、入门、进阶三个阶段。
因为对C++没有什么了解,这样的学习设定可能也有失准确性。望兄弟们多指点。谢谢!
科普:有效数字
有效数字是指一个数,从左边第一个非0数开始到末位最后一个数字 ,都被称为这个数的有效数字。比如0.009900,左边第一非0数字为9,后面还有3个数字,这4个数字都是有效数字。
1. 主要内置数据类型
还记得我们在初识C++时写的hello world么? 那几行代码中,我们见到过这样一个单词:int 。当时我只是简单说了下,这是C++的一种内置数据类型。今天我们来一起学习下C++都有哪些内置数据类型,都有什么特点。
1.1 首先我们来了解下,C++都定义了哪些数据类型
C++ 定义了一组表示整数、浮点数、单个字符和布尔值的算术类型。另外还定义了一种特殊类型:void。
void 类型没有对应的值,通常用作无返回值函数的返回类型。
这几种类型呢,在C++中又可以分成两大类:整型和浮点型(void类型除外)。
我们从以下几个方面来分析数据类型:
定义方式及表示方式
C++最小请求内存空间--存储空间
对于整型还涉及是否带符号
赋值
1.2 整形和浮点型
1.2.1 整型
整型根据不同的依据可以进行不同的分类。比如根据数据类型可以分为:整数,单个字符,布尔类型 ; 可以根据是否带符号分为:带符号与不带符号的类型。
分类一:整数、单个字符、布尔类型
数字
定义方式:int a=1; short a=1; long a=1;
不同类型的存储空间:
比如int:16位操作系统是2个字节,32/64位操作系统4个字节,也就是32bits,
比如long:64位操作系统,除了受到机器位数的影响,还受到数据模型(不是数据库的数据模型)影响,LLP64模型中long是32位外,LP64、ILP64、SILP64的long都是64位。
我们这里所说的最小存储空间,是指综合不同处理能力的CPU(比如32位的64位的)以及数据模型进行对比的,某个数据类型所需要的最小空间。比如int 类型,最小存储 空间是2个字节(16 bits), 如果请求的空间小于这个值,就会报错,而当前计算机的运行能力,一般分配给int类型的存储 空间为4个字节(32位),而空间的分配,是编译器自动分配的,不需要人为参与。至于自定义数据类型的空间如何分配,等 以后我们学到了,再去了解。
int 16bits
short 16bits
long 32bits
单个字符
定义方式:char a='a'; wchar_t a='我';
最小请求存储空间:
char 8bit
wchar_t 16bit
布尔类型
定义方式: bool a = true; boll a=false;在程序里,true 返回1,false 返回0;
最小请求空间:无。
分类二:带符号与不带符号的类型
除布尔类型外,其他整型值都可以分成带符号的或者不带符号的
整数:
带符号类型可以表示所有整数(包括负整数,0,正整数),不带符号的,只能表示非负整数。而默认情况下,都是带符号的(signed),如果想定义为不带符号的(unsigned) 类型则需要使用关键字unsigned
定义方式:unsigned (int) ,unsigned short unsigned long.
注意: unsigned int 中的int 可以省略,也就是说unsigned 默认表示为 不带符号的int类型。
至于字符类型:
也分为带符号的与不带符号的。但是与整数不同,字符类型分为plain char,unsigned char,signed char 虽然分为三种类型,却只有两种表示方式。你肯定要问为什么了。两种表示方式肯定是unsigned 和 signed的两种。那plain char又是什么呢?
plain char 只是一种称谓,它可以是signed char 也可以是unsigned char,那到底是哪个呢?这具要默认由编译器来决定,当然你也可以自己决定 ,g++ 编译器有4个参数:
-funsigned-char
-fno-signed-char
-fsigned-char
-fno-unsigned-char
前两个参数将char类型设置成unsigned char,后两个参数告诉编译器将char类型全部识别为signed char
取值范围:
无符号类型,所有位数都表示数值,带符号类型,策略上保留一位用作符号位,符号位为1为负数,0则为非负数。
正是因为符号位的存在,导致带符号类型与无符号类型数值的取值范围存在差异。
带符号类型被分配16位空间,取值范围为:-2 -15次方(至少是-2 -15次方加1)至2的15次方减1,而不带符号类型,取值范围为0至2的16次方减1。
假如int被分配出8位的空间,不带符号的取值范围为-127~127(有的环境里可以取到-128),带符号的取值范围为0~255.
赋值:
关于整型的赋值,我们这里只说下整数的赋值。赋值在某个类型的取值范围内,那赋值很简单,比如:unsigned a=254;
但是如果越出了取值范围呢?要分是否带符号进行分别对待
不带符号的情况 :
假设在8位的存储空间中,取值范围是0~255,如果是256怎么办呢? C++中会对两个值进行加减运算。如果大于255则进行减法运算(赋值-最大值),如果小于0,则进行加法运算,比如-1,赋值的结果,会是254,相当于-1+255
带符号的情况:
一般情况下,带符号的类型,赋值超出取值范围,会像不带符号的类型那样进行加减运算,但是并不一定所有编译器都会是这样的处理的。
1.2.2 浮点型
类型 float、 double 和 long double 分别表示单精度浮点数、双精度浮点数和扩展精度浮点数。一般 float 类型用一个字(32 位)来表示,double 类型用两个字(64 位)来表示,long double 类型用三个或四个字(96 或 128 位)来表示。类型的取值范围决定了浮点数所含的有效数字位数。
2. 字面值常量(2014-07-14更新)
1. 什么是字面值常量
痛苦死啊~对于字面值常量这一节,两个星期前就看了几遍,可是就是不是很明白到底是什么东西。放了两个星期,今天再来看,思路已经有些很清晰了。
其实字面值常量,是未定义而被直接使用的内置基本类型(除short类型外),其特点是不能修改,用值本身进行命名。
需要注意的是: 只有内置数据类型有字面值常量,没有类类型的字面值常量,所以也没有标准库字义的字面值。内置类型中,没有short类型的字面值
2. 字面值常量的表现形式(ASCII)
十进制: 20
八进制: \024 -- ASCII 用 8进制 表示需要以\ 开头
十六进制: \x14 -- ASCII 用16进制 表示需要以\x开头
3. 字符与字符串
单个字符 需要以单引号: '' 来引用
字符串 需要以双引号: "" 来引用 ,为了兼容 C 语言,C++ 中所有的字符串字面值都由编译器自动在末尾添加一个空字符
如:'A' 就是字符A,"A" 则是单字符A+空格 两个字符。
4. 整型的不同使用方式
类型 | 表现方式 |
int(整数类型中默认为Int 或long 根据字面值大小自动决定) | 变量: int a=1; 常量:1 |
short | 变量:short int a; 常量: |
long | 变量:long int a; 常量:1L(L 可以是小写,但是建议使用大写,小写容易与数字1混淆) |
char | 变量:char n='a'; 常量:'a' |
wchar_t | 变量:wchar_t n; 常量:'a'L |
float | 变量:float n; 常量:0.1314f 或者0.1314F |
double(浮点类型中默认为double) | 变量:double n; 常量:0.1314 |
long double | 变量:long double n; 常量:0.1314L |
布尔 | true 或者 false |
不带符号(我们知道默认是带符号的) | 10u(不带符号的整型) 、10Lu(不带符号的长整型)、 10LU(不带符号的长整型) |
5. 字符(串)连接
std:cout<<"Hello " "world"<<endl; 输出结果等价于:<br="">
std:cout<<"Hello world"<<endl; 输出结果等价于:<br="">
std:cout<<"Hello "
"world"<<endl; 输出结果等价于:<br="">
std:cout<<"Hello " <<"world"<<endl; 输出结果等价于:<br="">
std:cout<<"Hel\
lo w\
orld"<<endl;
注意反斜线符号必须是该行的尾字符——不允许有注释或空格符。同样,后继行行首的任何空格和制表符都是字符串字面值的一部分。正因如此,长字符串字面值的后继行才不会有正常的缩进
6. 字面值常量会在什么情况下出现
std::cout // 指针的定义和赋值。
其他情况尚未想到,如果哪位仁兄发现还有其他情况,辛苦辛苦指点下小弟。
C++学习 之 初识变量和基本类型 之 内置类型的更多相关文章
- (C/C++学习笔记) 九. 变量的存储类型
九. 变量的存储类型 ● 变量的存储类型(见附页) ● 注释 ①对于自动变量,它属于动态存储方式. 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式.由此看来,一个 ...
- 02.第二章_C++ Primer学习笔记_变量和基本类型
2.1 基本内置类型 2.1.1 算术类型 算术类型包括两类:整型和浮点型 2.2 变量 2.3 复合类型 2.4 const限定符 2.5 处理类型 2.6 自定义数据结构
- C++ Primer 学习笔记_5_变量和基本类型(续2)
变量和基本类型 七.枚举 枚举不但定义了整数常量集,并且还把它们聚集成组. 枚举与简单的const常量相比孰优孰劣, 通过以下一段代码. 一看便知: enum {input, output, a ...
- [原创]Scala学习:关于变量(val,var,类型推断)
1.常量定义: val val 类似于java中的final变量.一旦初始化了,val就不能再被赋值 val megs = "hello world" 2.变量的定义: var ...
- java基本类型(内置类型)取值范围
例1: public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.pri ...
- C++ Primer 变量和基本类型
<C++ Primer 4th>读书摘要 基本上所有的语言都要提供下列特征: • 内置数据类型,如整型.字符型等. • 表达式和语句:表达式和语句用于操纵上述类型的值. • 变量:程序员可 ...
- C++ 学习笔记 变量和基本类型(一)
C++ 学习笔记 一.变量和基本类型概述 类型是所有程序的基础.类型告诉我们数据代表什么意思以及可以对数据执行哪些操作. c++基本类型: 字符型 整型 浮点型 c++ 还提供了可用于自定义数据类型的 ...
- Lex与Yacc学习(八)之变量和有类型的标记(扩展计算器)
变量和有类型的标记 下一步扩展计算器来处理具有单个字母名字的变量,因为只有26个字母 (目前只关心小写字母),所以我们能在26个条目的数组(称它为vbltable)中存储变量. 为了使得计算器更加有用 ...
- 【c++ Prime 学习笔记】第2章 变量和基本类型
2.1 基本内置类型 基本数据类型包含了算术类型(arithmetic type)和空类型(void) 算数类型,包含了字符.整型数.布尔值和浮点数 空类型,不对应具体的值 2.1.1 算术类型 算术 ...
随机推荐
- SpringBoot-整合Swagger2
swagger2是一个用于生成.并能直接调用的可是话restful风格的服务 下面贴出springboot整合swagger2代码 一.maven依赖 这里使用的spring-boot版本是2.1.1 ...
- odoo标识符
class Book(models.Model): _name = "library.book" _description = "Book" _order = ...
- NB-IOT无线帧结构和下行物理信道
NB-IOT Downlink OFDM参数 1.下行基于OFDMA, FF点数=128,基带采样速率1.92MHz,子载波间距15kHz,有效带宽180kHz=1PRB OFDMA: 正交频分多址, ...
- 严格次小生成树[BJWC2010]
原文必点 原题链接 题目描述 给定一张\(N\) 个点$ M $条边的无向图,求无向图的严格次小生成树. 设最小生成树的边权之和为\(sum\),严格次小生成树就是指边权之和大于\(sum\)的生成树 ...
- golang高并发
golang 为什么能做到高并发 goroutine是go并行的关键,goroutine说到底就是携程,但是他比线程更小,几十个goroutine可能体现在底层就是五六个线程,Go语言内部帮你实现了这 ...
- jar包上传本地maven仓库
执行mvn install:install-file -Dfile=D:\software\jave-1.0.2\jave-1.0.2\jave-1.0.2.jar -DgroupId=it.saur ...
- 使用fiddler抓取jmeter发送的请求
使用jmeter发送请求时,有时需要查看发送的请求是否合理,可以使用fiddler更直观的抓取并查看jmeter发送的请求.步骤如下:1.设置fidder-connections 端口号为8888 2 ...
- 【Winfrom-Panel】Panel隐藏与显示,自动隐藏菜单, Auto-Hide Menu
设计界面:2个button,一个panel 当鼠标移动到btnHome时,显示menuPanel 当鼠标离开btnHome时,隐藏menuPanel 当btnPin箭头向左时,menuPanel为自动 ...
- 微信小程序开发入门教程(一)---hello world
由于无法备案网站,前期做了个微信小程序(开发版)就搁置了,几乎忘了开发过程.现在重新梳理,做个记录. 一.最基本的小程序前端例子hello 1.下载安装 微信开发者工具 官网: https://d ...
- 2g 大文件上传
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...