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 算术类型 算术 ...
随机推荐
- zabbix监控项截图整理
general监控项
- 迭代器遍历【List、Set、Map】
迭代器遍历[List.Set.Map] example package boom.collection; import java.util.ArrayList; import java.util.Ha ...
- SDU&PDU
SDU(service Data Unit):服务数据单元,又叫业务数据单元,是指定层的用户服务的数据集,传送到接收方的时候同一协议层时数据没有发生变化,即业务部分,然后发给下层之后,下层将其封装在P ...
- 二、CentOS 7安装部署GitLab服务器(解决邮箱发信问题)
一.环境安装(10.0.0) 1.安装依赖软件 yum -y install policycoreutils policycoreutils-python openssh-server openssh ...
- Scala(一)——基本类型
Scala语言快速入门(基本类型) (参考视频:av39126512,韩顺平281集scala精讲) 一.Linux和Windows环境安装 这部分跳过,直接使用IDEA进行搭建,和其他编程语言配置差 ...
- K nearest neighbor cs229
vectorized code 带来的好处. import numpy as np from sklearn.datasets import fetch_mldata import time impo ...
- 从零开始学会GAN 0:第一部分 介绍生成式深度学习(连载中)
本书的前四章旨在介绍开始构建生成式深度学习模型所需的核心技术.在第1章中,我们将首先对生成式建模领域进行广泛的研究,并从概率的角度考虑我们试图解决的问题类型.然后,我们将探讨我们的基本概率生成模型的第 ...
- 多组件共享-vuex —— 使用vuex 报错 actions should be function or object with ”handler“
vuex分模块使用时出现的问题,单文件暂时没有用到 原因是在action 文件中没有任何定义(即:文件为空)或则 action 没有任何方法返回,将action在模块引用时去掉即可 转自:https: ...
- POI导出Excel不弹出保存提示_通过ajax异步请求(post)到后台通过POI导出Excel
实现导出excel的思路是:前端通过ajax的post请求,到后台处理数据,然后把流文件响应到客户端,供客户端下载 文件下载方法如下: public static boolean downloadLo ...
- 启动SpringBoot web项目出现 Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 3,....
详细错误信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> ...