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

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

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

2.1 C++ 数据类型

C++的算术类型


与操作系统的位数有关


布尔

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


字符型


类型 含义 最小尺寸 说明
char 字符 8位 1个char空间应确保可存放机器基本字符集中任意字符字符对应的数字
wchar_t 宽字符 16位 用于扩展字符集,确保可以存放机器最大扩展字符集中任意一个字符
char16_t Unicode字符 16位 用于扩展字符集,为Unicode字符集服务
char32_t Unicode字符 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<iostream>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 int和int 运算
*/
unsigned u =10;
int i =-42;
// unsigned int和int 运算,会将int看成unsigned int,且结果也是unsigned int
std::cout << u + i << std::endl; //输出 4294967264
/*
  unsigned char和char 运算
*/
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 思维导图

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




相关文章
|
2月前
|
存储 Linux C语言
【C++基础】数据类型详解
这篇文章详细介绍了C++中各种基本数据类型,包括整型、浮点型、字符型、字符串型和布尔型,以及它们的使用方式和范围。
21 4
|
1月前
|
C语言 C++
实现两个变量值的互换[C语言和C++的区别]
实现两个变量值的互换[C语言和C++的区别]
16 0
|
3月前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
46 4
|
3月前
|
存储 安全 C++
C++:指针引用普通变量适用场景
指针和引用都是C++提供的强大工具,它们在不同的场景下发挥着不可或缺的作用。了解两者的特点及适用场景,可以帮助开发者编写出更加高效、可读性更强的代码。在实际开发中,合理选择使用指针或引用是提高编程技巧的关键。
32 1
|
2月前
|
JavaScript 前端开发 Java
通过Gtest访问C++静态、私有、保护变量和方法
通过Gtest访问C++静态、私有、保护变量和方法
62 0
|
5月前
|
安全 C++
C++一分钟之-互斥锁与条件变量
【6月更文挑战第26天】在C++并发编程中,`std::mutex`提供互斥访问,防止数据竞争,而`std::condition_variable`用于线程间的同步协调。通过`lock_guard`和`unique_lock`防止忘记解锁,避免死锁。条件变量需配合锁使用,确保在正确条件下唤醒线程,注意虚假唤醒和无条件通知。生产者-消费者模型展示了它们的应用。正确使用这些工具能解决同步问题,提升并发性能和可靠性。
59 4
|
4月前
|
存储 编译器 C++
|
5月前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
46 0
|
5月前
|
SQL 人工智能 算法
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
技术心得记录:模板函数函数模板FunctionTemplate(C++Primer
|
5月前
|
C语言 C++
技术经验分享:c++中的数据类型转换
技术经验分享:c++中的数据类型转换
28 0