6.变量的本质
6.1 知识点
变量类型回顾
有符号类型:
signed short
/int
:取值范围从 -32768 到 32767。signed int
:取值范围从 -21亿多 到 21亿多。signed long
/int
:取值范围从 -21亿多 到 21亿多,或从 -9223亿亿多 到 9223亿亿多。signed long long
/int
:取值范围从 -9223亿亿多 到 9223亿亿多。
无符号类型:
unsigned short
/int
:取值范围从 0 到 65535。unsigned int
:取值范围从 0 到 42亿多。unsigned long
/int
:取值范围从 0 到 42亿多,或从 0 到 18446亿亿多。unsigned long long
/int
:取值范围从 0 到 18446亿亿多。
浮点数:
float
:取值范围从 -3.4 * 10^38 到 3.4 * 10^38,有效数字为 6/7 位。double
:取值范围从 -1.7 * 10^-308 到 1.7 * 10^308,有效数字为 15/16 位。long double
:取值范围从 -1.1 * 10^-4932 到 1.1 * 10^4932 等,有效数字为 18/21 位,或 33/36 位。
特殊类型:
bool
:值为true
或false
,用 1 和 0 来表示。char
:表示一个字符,采用 ASCII 编码。string
:表示一串字符。
变量的存储空间
计算机中最小的存储单位是“位”(bit),具体的存储关系如下:
- 1 byte = 8 bit(字节 = 8 位)
- 1 KB = 1024 byte(千字节 = 1024 字节)
- 1 MB = 1024 KB(兆字节 = 1024 千字节)
- 1 GB = 1024 MB(吉字节 = 1024 兆字节)
- 1 TB = 1024 GB(太字节 = 1024 吉字节)
通过 sizeof(变量类型)
运算符可以获取变量类型所占的内存空间(单位:字节)。
有符号类型:
short
:所占字节数为 2 byte。int
:所占字节数为 4 byte。long
:所占字节数为 4 byte。long long
:所占字节数为 8 byte。
无符号类型:
unsigned short
:所占字节数为 2 byte。unsigned
:所占字节数为 4 byte。unsigned long
:所占字节数为 4 byte。unsigned long long
:所占字节数为 8 byte。
浮点数:
float
:所占字节数为 4 byte。double
:所占字节数为 8 byte。long double
:所占字节数为 8 byte。
特殊类型:
bool
:所占字节数为 1 byte。char
:所占字节数为 1 byte。string
:由于存储的内容可变,通常不通过sizeof
查看其内存空间大小。string
中不仅会存储字符串本身的信息,还会存储一些字符串的基本信息(如指针、长度信息、容量信息等)。在某些编译器下,string
的大小可能为 40 byte。
变量的本质:二进制
变量的本质是二进制——计算机中所有数据的本质都是二进制,即一堆 0 和 1。
为什么是二进制?
数据传递只能通过电信号,而电信号只有两种状态:开(1)和关(0)。因此,二进制(0 和 1)是用来表示这两种状态的最简单方式。
在计算机中,最小的存储单位是位(bit),每个位只能表示 0 或 1。
- 1 bit 只能表示一个数,要么是 0,要么是 1。
- 为了方便表示数据,我们使用字节(byte)这一存储单位,它是由 8 个 bit 组成的。
- 1 byte = 8 bits。例如,
0000 0000
就是一个字节的二进制表示。
二进制与十进制的对比与转换
在计算机中,所有的数据最终都需要转换成二进制形式存储和处理。二进制和十进制之间的转换是非常常见的操作,我们可以通过以下方式进行对比和转换:
- 二进制:每一位(bit)代表一个 2 的幂次方,按位展开即可得出数值。
- 十进制:每一位代表一个 10 的幂次方,通过求和计算得到最终数值。
例如:
- 二进制
101
可以转换为十进制5
。 - 十进制
10
可以转换为二进制1010
。
以下是更复杂的例子:
理解二进制的基础有助于我们更好地理解计算机如何存储和处理数据。
6.2 知识点代码
Lesson06_变量的本质.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "变量的本质\n";
#pragma region 变量类型回顾
//有符号
//[signed] short [int] (-32768 ~ 32767)
//[signed] int (-21亿多 ~ 21亿多)
//[signed] long [int] (-21亿多 ~ 21亿多 或 -9223亿亿多 ~ 9223亿亿多 )
//[signed] long long [int] (-9223亿亿多 ~ 9223亿亿多)
//无符号
//unsigned short [int] (0 ~ 65535)
//unsigned [int] (0 ~ 42亿多)
//unsigned long [int] (0 ~ 42亿多 或 0 ~ 18446亿亿多 )
//unsigned long long [int] (0 ~ 18446亿亿多 )
//浮点数
//float (-3.4*10^-38 ~ 3.4*10^38) (6/7位有效数字)
//double (-1.7*10^-308 ~ 1.7*10^308) (15/16位有效数字)
//long double (-1.1*10^-4932 ~ 1.1*10^4932等) (18/21、33/36位有效数字)
//特殊
//bool (true1和false 0和1)
//char (一个字符, ASCII编码)
//string (一串字符)
#pragma endregion
#pragma region 知识点一 变量的存储空间(内存中)
//计算机中最小的存储单位为"位"(bit)
// 1byte = 8bit 1字节 = 8位
// 1KB = 1024byte 1千字节 = 1024字节
// 1MB = 1024KB 1兆字节 = 1024千字节
// 1GB = 1024MB 1吉字节 = 1024兆字节
// 1TB = 1024GB 1太字节 = 1024吉字节
// 通过sizeof(变量类型)运算符 可以获取变量类型所占的内存空间(单位:字节)
//有符号
cout << "有符号" << endl;
//[signed] short [int] (-32768 ~ 32767)
cout << "short所占字节数:" << sizeof(short) << "byte" << endl;//2byte
//[signed] int (-21亿多 ~ 21亿多)
cout << "int所占字节数:" << sizeof(int) << "byte" << endl;//4byte
//[signed] long [int] (-21亿多 ~ 21亿多 或 -9223亿亿多 ~ 9223亿亿多 )
cout << "long所占字节数:" << sizeof(long) << "byte" << endl;//4byte
//[signed] long long [int] (-9223亿亿多 ~ 9223亿亿多)
cout << "long long所占字节数:" << sizeof(long long) << "byte" << endl;//8byte
//无符号
cout << "无符号" << endl;
//unsigned short [int] (0 ~ 65535)
cout << "unsigned short所占字节数:" << sizeof(unsigned short) << "byte" << endl;//2byte
//unsigned [int] (0 ~ 42亿多)
cout << "unsigned所占字节数:" << sizeof(unsigned) << "byte" << endl;//4byte
//unsigned long [int] (0 ~ 42亿多 或 0 ~ 18446亿亿多 )
cout << "unsigned long所占字节数:" << sizeof(unsigned long) << "byte" << endl;//4byte
//unsigned long long [int] (0 ~ 18446亿亿多 )
cout << "unsigned long long所占字节数:" << sizeof(unsigned long long) << "byte" << endl;//8byte
//浮点数
cout << "浮点数" << endl;
//float (-3.4*10^-38 ~ 3.4*10^38) (6/7位有效数字)
cout << "float所占字节数:" << sizeof(float) << "byte" << endl;//4byte
//double (-1.7*10^-308 ~ 1.7*10^308) (15/16位有效数字)
cout << "double所占字节数:" << sizeof(double) << "byte" << endl;//8byte
//long double (-1.1*10^-4932 ~ 1.1*10^4932等) (18/21、33/36位有效数字)
cout << "long double所占字节数:" << sizeof(long double) << "byte" << endl;//8byte
//特殊
cout << "特殊" << endl;
//bool (true1和false 0和1)
cout << "bool所占字节数:" << sizeof(bool) << "byte" << endl;//1byte
//char (一个字符, ASCII编码)
cout << "char所占字节数:" << sizeof(char) << "byte" << endl;//1byte
//string (一串字符)
//注意:string由于存储的内容可变,因此我们一般不通过sizeof查看其内存空间大小
// string中不仅会存储字符串本身的信息,还会存储一些字符串的基本信息(比如指针、长度信息、容量信息等等)
cout << "string所占字节数:" << sizeof(string) << "byte" << endl;//40byte
#pragma endregion
#pragma region 知识点二 变量的本质
//变量的本质是2进制——>计算机中所有数据的本质都是二进制 是一堆0和1
//
//为什么是2进制?
//数据传递只能通过电信号,只有开和关两种状态。所以就用0和1来表示这两种状态
// 计算机中的存储单位最小为bit(位),他只能表示0和1两个数字
// 1bit 就是1个数 要不是0要不是1
// 为了方便数据表示
// 出现一个叫byte(字节)的单位,它是由8个bit组成的存储单位。
// 所以我们一般说一个字节为8位
// 1byte = 0000 0000
// 2进制和10进制的对比
// 2进制和10进制之间的相互转换
#pragma endregion
}
6.3 练习题
请默写出常用的14个变量类型他们所占用的内存空间
有符号的整型
- short:2 byte,相当于 16 位,即
0000 0000 0000 0000
这样的表示形式。 - int:4 byte,共 32 位,例如
0000 0000 0000 0000 0000 0000 0000 0000
。 - long:4 byte,32 位。
- long long:8 byte,64 位。
- short:2 byte,相当于 16 位,即
无符号整型
- unsigned short:2 byte,16 位。
- unsigned:4 byte,32 位。
- unsigned long:4 byte,32 位。
- unsigned long long:8 byte,64 位。
浮点数
- float:4 byte,用于表示单精度浮点数。
- double:8 byte,用于表示双精度浮点数。
- long double:8 byte,同样用于表示精度较高的浮点数。
特殊类型
- bool:1 byte,通常用于表示逻辑真(非 0 值)或逻辑假(0 值)。
- char:1 byte,可用于存储单个字符的 ASCII 码等相关编码值。
- string:可变的长度,用于存储字符序列,其长度根据实际存储的内容而定。
请将2进制11000111、001101、01010101转为10进制,写出计算过程
11000111
1 + 2 + 4 + 64 + 128 = 199001101
1 + 4 + 8 = 1301010101
1 + 4 + 16 + 64 = 85
请将10进制99、1024、78937转为2进制,写出计算过程
99
99 =01100011
1024
1024 =0100 0000 0000
78937
78937 =0001 0011 0100 0101 1001
6.4 练习题代码
Lesson06_练习题.cpp
#include <iostream>
using namespace std;
int main()
{
cout << "变量的本质 练习题\n";
#pragma region 练习题一
//请默写出常用的14个变量类型他们所占用的内存空间。
//
// byte = 8bit = 0000 0000
//1.有符号的整型
// short 2byte
// int 4byte
// long 4byte
// long long 8byte
//
//2.无符号整型
// unsigned short 2byte
// unsigned 4byte
// unsigned long 4byte
// unsigned long long 8byte
//
//3.浮点数
// float 4byte
// double 8byte
// long double 8byte
//
//4.特殊类型
// bool 1byte
// char 1byte
// string 可变的
#pragma endregion
#pragma region 练习题二
//请将2进制11000111、001101、01010101转为10进制,写出计算过程
//11000111 =
// 1 + 2 + 4 + 64 + 128 = 199
//001101 =
// 1 + 4 + 8 = 13
//01010101 =
// 1 + 4 + 16 + 64 = 85
#pragma endregion
#pragma region 练习题三
//请将10进制99、1024、78937转为2进制,写出计算过程
//99 = 01100011
//1024 = 0100 0000 0000
//78937 = 0001 0011 0100 0101 1001
#pragma endregion
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com