栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ primer 复习 第二章变量和基本类型 2.1 C++ 数据类型

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ primer 复习 第二章变量和基本类型 2.1 C++ 数据类型

C++ primer 复习 第二章 变量和基本类型 2.1 C++ 数据类型

C++的算术类型

与操作系统的位数有关

布尔

类型含义最小尺寸说明
bool布尔未定义,一般为一个字节非零值为 True,零为 False

字符型

类型含义最小尺寸说明
char字符8位1个char空间应确保可存放机器基本字符集中任意字符字符对应的数字
wchar_t宽字符16位用于扩展字符集,确保可以存放机器最大扩展字符集中任意一个字符
char16_tUnicode字符16位用于扩展字符集,为Unicode字符集服务
char32_tUnicode字符32位用于扩展字符集,为Unicode字符集服务

整型

类型含义最小尺寸说明
short短整型16位
int整型16位4字节(32位/64位)一个int至少和一个short一样大
long长整型32位4字节 一个long至少和一个int一样大
long long长长整型64位8字节 C++11定义,long long至少和long一样大

浮点型

类型含义最小尺寸
float浮点型四字节(32位机),六位有效数字
double双精度浮点八字节(32位机),十位有效数字

位 字节 字

计算机以比特(位)序列存储数据,每个比特非0即1

字节由 8 位构成, 可用于表示ASCII字符,是可寻址的最小内存块

字是计算机进行数据存储和处理运算的单位

【32位计算机:1字=32位】【64位计算机:1字=64位】

无符号类型

1、有符号整形前面加上unsigned 就可得到无符号类型,例如 unsigned long

2、unsigned int 可缩写成 unsigned

3、char 特殊,类型分为:char、signed char、unsigned char。char 是其中一种(编译器决定)

类型转换

#include
int main(){
    //布尔 <-> 整型
    bool b = 42;			//b为真
    int i = b;				//i为1 

    // 浮点 <-> 整型
    i = 3.0;				//i为3
    double pi = 3.14;		//pi值为3.0

    // char <-> 整型  int —> char 只保留后八位
    //unsigned char取值范围: 0 ~ (2^8 -1) 
    unsigned char c = -1;   //char占8比特,c为255

    //signed char取值范围: -(2^7) ~ (2^7-1) 
    signed char c2 = 128;   //char占8比特,c2为-128

    std::cout.setf(std::ios::showpoint); //设置输出小数点后多余的0
    std::cout << pi << std::endl;
    std::cout.unsetf(std::ios::showpoint); //恢复默认设置,即不再输出多余的0
    
    system("pause");
	return 0;
}

注:char在一些机器上有符号,一些无符号

误混用符号和无符号类型


unsigned u = 10;
int i = -42;

// unsigned int和int 运算,会将int看成unsigned int,且结果也是unsigned int
std::cout << u + i << std::endl; //输出 4294967264

char a = -16;
unsigned char b = 14;

std::cout << a + b << std::endl;  // 输出-2
	
//C语言中比int小的整型(包括short 、unsigned short 、 unsigned char和char)在运算中都要转换成int然后进行运算,因为通常情况下int长度被定义为机器处理效率最高的长度。比如32位机,一次处理4个字节效率是最高的。所以虽然short(本机占2个字节)更节省内存,但是运算效率int更高。所以算术运算a + b中a、b默认转换成了int,其结果也是带符号的。

//但是需要另一个问题 : 转换int类型时,高位补齐.若unsigned类型转换成int类型,高位补0。若signed类型转换成int类型,原来最高位是1则补1,是0则补0.char c = 255,在内存中为11111111,最高位是1,转换成int时高位补1,也就是11111111 11111111,就是-1.(看不懂请参考下面负数在计算机如何存储)

//注 : 转换成unsigned int类型时,也是一样的

负数在计算机中如何存储

原码:10进制转换成2进制是原码,正数原码符号位为0,负数原码符号位为1(10进制1的原码是0000 0001,-1的原码是1000 0001)

反码:正数反码是本身,负数反码是负数原码0变为1,1变为0 (-1的原码是1000 0001 它的反码就是 1111 1110,负数求反时符号位不参与变换)

补码:正数补码是本身,负数补码是其反码加一 (-1的原码是1000 0001 它的反码就是 1111 1110 它的补码就是 1111 1111)

正数的原码,反码 ,补码三值合一, 负数的原码,反码,补码不同

为什么要设置反码,补码

反码补码原码是针对二进制数而言,计算机若用原码相加减,正数加正数不会出错,然而正数和负数原码相加就会出错,引进补码的作用是为了让计算机更方便做减法

补码反码是为了简化减法,将减号化为负数,再将负数化为补码求加法。计算机中所有数都是以补码形式存储的

已知一个数的补码,求原码

如果补码表示是一个负数,那么对补码取反后再加1(不改变符号位),即为原码

例:除符号位 1111001 取反为 0000110 ,再加 1 是10000111,原码即为 10000111(-7)

VS查看内存

单字节无符号整数范围是 0~255 二进制表示( 0000 0000~1111 1111)

单字节有符号整数范围是-128 ~127

正数二进制表示范围(0 000 0001 ~ 0 111 1111)即1~127

负数二进制表示范围(1 000 0001 ~ 1 111 1111)即-127~-1

所以0分为+0和-0 (0000 0000 表示+0,1000 0000 表示-0 表示-128)

注:int test = -0,其值仍为0,因为0不分正负。该处只是在说明内存中存储-128的方式

打上断点 —> 调试 —> 启动调试

调试 —> 窗口 —> 内存 —> 内存1

第一个红框输入 &test 回车,第二个红框内的数值即为16进制的内存值

16进制转二进制 0X 80 = 1000 0000 (即负0)

字面值常量

一个型如42的值就称为字面值常量

不可修改,无法对其取地址,也没有引用(因为其不是一个对象,只是一个字面值)

转义序列

通常使用转义字符表示 ASCII 码字符集中不可打印 控制字符和特定功能字符

换行符,制表符,单双引号,反斜线,回车符

泛化转义序列

指定字面值类型

附 2.1 思维导图

这一小节内容很多,单独附图,便于记忆

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/384428.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号