c++学习笔记2——数据类型、常量、变量相关

注:c++是静态类型语言,即编译阶段检查类型

一. 分类:基本数据类型可以分为算术类型和空类型。算术类型:字符、整型数、布尔值、浮点数。空类型不对应具体的值。

算术类型:还可以分为:整型(包括字符,布尔,整型数)、浮点型。浮点型还可以分为单精度(float)、双精度(double)、和扩展精度(long double)

类型占的空间(字节)取值范围
short2216-1~216-1-1
int42-31~231-1
unsigned int40~232-1
long42-31~231-1
unsigned40~232-1
char1
unsigned char10~255
signed char1-128~127
float4保留小数点后7位,保证6位有效数字
double8保留小数点后16位,保证15位有效数字

注:大多数机器:
一个字节 = 8个bite(位)
一个字 = 4个字节
通常:float一个字,double2个字

整型:整型数、字符型、布尔型
除去布尔型和扩展型外,其他整型还可划分为带符号无符号,其中:int、short、long、long long均为带符号和类型,前面加unsigned 变为无符号,而字符型则分为:char、unsigned char、signed char 。也就是说char型根据编译器不同可能会是表现不同类型。

选择数据类型的经验:

  1. 整数运算:int
  2. 浮点运算:double
  3. 明确知晓数值不可能为负:无符号类型
  4. 算术表达式不要有布尔类型和char

二. 类型转换

  1. 非布尔的算术值赋给布尔类型,初始值为0,则为false,否则,为ture。
  2. 布尔值赋给非布尔类型,初始值为false,则为0,初始值为ture,则为1。
 bool b=42;//b为真
 int i=b;//i=1
 i=3.14;//i =3
 double pi = i;//pi=3.0
  1. 把浮点型赋给整数类型,近似处理,只保留整数部分。
  2. 吧整数型赋给浮点型,小数记为0
unsigned char c=  -1;//c=255
signed char d = 256;//c未定义
  1. 把一个超过取值范围的数赋给无符号类型,结果为该数对该无符号类型表示数值总数取模后的余数。模:即该类型的取值范围
  2. 把一个超过取值范围的数赋给有符号类型,结果为未定义的,很危险。

含有无符号类型的转化。

unsigned u =10;
int i = -42;
cout<<i+i<<endl;//输出-84;
cout<<u+i<<endl;//int4字节的话,则输出10+2^32^-42

signed u =10,i=42;
cout<<u-i<<endl;//输出-32

负数转化为无符号数,等于该类型的无符号取值的最大值与该数进行运算。上例为-42则为:232-42

注:补充:
1个字节8位,取值范围:无符号:0~28-1
           带符号:-27~27-1
注:
int (4字节):
正数1:0000 0000 0000 0001
负数-1:因为int是带符号的类型,第一位代表符号,所以理论上为:1000 0000 0000 0001;但负数采用补码形式:即取绝对值后取反再加1。即1111 1111 1111 1111,

注:带符号类型和不带符号类型不要混用。

三. 字面值常量。
3.1 整型数的字面值常量
每个字面值常量都对应一种数据类型,字面值常量的形式和值决定其数据类型。

注:进制:二进制:十进制:八进制:0开头的整数,十六进制:以0x开头的整数

3.2 浮点数的字面值:一个小数或者科学计数法
3.3 字符和字符串字面值:
  字符型字面值:以单引号包括起来的一个字符如:‘c’
  字符串型字面值:以双引号括起来的空字符或多个
          字符"abc"
注:字符串字面值实质为由常量字符构成的数组,每个字符串后有一个\0(空字符),所以字符串字面值的长度比内容多1。

3.4 转义序列
3.4.1 转义字符:
在这里插入图片描述
3.4.2 泛化的转移序列:
\7 (响铃)
\0(空)
\40(空格)
\12(换行)
\115(字符M)

四. 指定字面值的类型
在这里插入图片描述
区分前后缀的u、U、L。前缀u、U是表示16或32位,L是表示宽字符。后缀u或U是表示不带符号的类型。

五. 变量
5.1 变量的组成:类型说明符 变量名

5.2初始化:初始化不等于赋值。初始化是创建变量时给其一个初始值,而赋值是把对象的当前值擦除,替换一个新值。

5.2.1 列表初始化:用花括号。如 int a={0);
          等价于int a=0;
          等价于int a (0);
          等价于int a{0};
使用这种初始化的特点,当存在信息丢失,如浮点型数赋值给为整型的初始化时,会报错,

5.2.2 默认初始化:

  1. 内置类型的变量未被显式初始化,它的值由定义的位置决定。定义在任何函数体外的初始化值默认0.
  2. 绝大数类支持无需显性初始化,因为其类提供了一个初始化值,如string类
  3. 一些类规定必须显性初始化。

5.3 变量的声明和定义

声明:因为c++支持分离式编译,所以多个文件中,一个文件想要使用另一个文件的定义的变量,则需要声明。
定义:创建与名字关联的实体

声明一定不要显式初始化。不然就变成了定义。
如:

extern int i;//声明并定义i
int j;//定义j
extern int z = 0;//定义z

变量只能被定义一次,但可以多次声明
如果在多个文件中使用同一变量,必须分开定义和声明。变量的定义只能出现在一个文件中。其他用到该变量的文件必须对其进行声明。而不能重复定义。

5.4 标识符

标识符由字母数字下划线组成。且必须以字母或下划线开头。

5.5 名字的作用域
全局作用域、块作用域、嵌套的作用域
绝大数作用域以花括号分隔

同一个名字在不同作用域中可能指向不同的实体
全局:定义在函数体外的名字
块:定义在函数体内,且非某一单独语句段如if、for中,整个函数都可以使用
定义在单独的花括号内的如if、for等中,只能在该处使用

注意:函数内不宜含有和全局变量相同的名字变量

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值