目录
1.数据类型介绍
char //字符数据类型
short //短整型
int //整形
long //长整型
long long //更长的整形
float //单精度浮点数
double //双精度浮点数
类型的意义:
1.使用这个类型开辟内存空间的大小(大小决定了使用范围)。
2.如何看待内存的视角。
1.1整型类型的基本归类:
整形家族:
char
unsigned char
signed char
short
unsigned short [int]
signed short [int]
int
unsigned int
signed int
long
unsigned long [int]
浮点数家族:
float
double
构造类型:
数组类型
结构体类型 struct
枚举类型 enum
联合类型 union
指针类型:
int *pi;//整形指针
char *pc;//字符整形指针
float* pf;//单精度浮点指针
void* pv;//空指针
空类型:
void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型
2. 整形在内存中的存储
比如:
int a = 20;
int b = -10;
我们知道为 a 分配四个字节的空间。
那如何存储?
下来了解下面的概念:
2.1 原码、反码、补码
计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位
正数的原、反、补码都相同。
负整数的三种表示方法各不相同。
原码
直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码
将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码
反码+1就得到补码。
对于整形来说:数据存放内存中其实存放的是"补码"。
为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统
一处理;
同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程
是相同的,不需要额外的硬件电路。
根据上面的原码、反码、补码的结论,我们先猜想这两个整形

2.2大小端存储
2.3练习
练习1

答案:

分析:

a:以整型的方式打印
补码:11111111111111111111111111111111
反码:11111111111111111111111111111110
原码:10000000000000000000000000000001 --> -1
b:以整型的方式打印
补码:11111111111111111111111111111111
反码:11111111111111111111111111111110
原码:10000000000000000000000000000001 --> -1
c:以整型的方式打印
补码:00000000000000000000000011111111
反码:00000000000000000000000011111111
原码:00000000000000000000000011111111 --> 255
练习2

答案:

分析:
原码:10000000000000000000000100000000
反码:11111111111111111111111011111111
补码:11111111111111111111111100000000
实际存储:10000000
以无符号整型的方式打印
补码:11111111111111111111111100000000
对于无符号整型,其原码、反码和补码都等于其二进制表示本身。由于没有符号位,所以无符号整型只能表示非负整数。
反码:11111111111111111111111100000000
补码:11111111111111111111111100000000

练习3

答案:
和上面的一样

分析:
原码:00000000000000000000000010000000
反码:01111111111111111111111011111111
补码:01111111111111111111111100000000
实际存储:10000000
以无符号整型的方式打印
补码:11111111111111111111111100000000
对于无符号整型,其原码、反码和补码都等于其二进制表示本身。
由于没有符号位,所以无符号整型只能表示非负整数。
反码:11111111111111111111111100000000
补码:11111111111111111111111100000000
练习4

输出结果应该是个死循环
结果应该是9,8,7,6,5,4,3,2,1,0,4294967295(无符号整形的最大)…
这里的问题出现在条件的设置上,条件改为i>0即可避免
在这里插入图片描述





练习5

答案:

分析:
i在内存中的存储:
原码:10000000000000000000000000010100
反码:11111111111111111111111111101011
补码:11111111111111111111111111101100
j在内存中的存储:
原码:00000000000000000000000000010100
反码:00000000000000000000000000010100
补码:00000000000000000000000000010100
i+j 补码相加
补码:11111111111111111111111111110110
反码:10000000000000000000000000001001
原码:10000000000000000000000000001010 --> -10
3.浮点类型在内存中的存储
浮点数存储的例子:

结果:

在之前的学习中,我们知道整形和单精度浮点数的存储空间均为4个字节,但是通过这段代码,我们不难看出浮点数和整形在内存中的存储可能并不相同。
3.1浮点数的存储规则
浮点数的存储规则遵循IEEE 754标准,它定义了浮点数的表示和运算规则。根据该标准,浮点数由三个组成部分构成:符号位、指数位和尾数位。
符号位(Sign):用于表示浮点数的正负性,其中0表示正数,1表示负数。
指数位(Exponent):用于表示浮点数的指数部分。一般情况下,指数位是一个带有偏移量的二进制整数。通过使用偏移量,可以表示负指数和较大的正指数。例如,偏移量为127的8位指数位可以表示范围为-126到127的指数值。
尾数位(Mantissa/Fraction):用于表示浮点数的小数部分或者有效数字。尾数位是一个二进制小数,通常规范化为形如1.xxxxx的形式(其中xxxxx表示二进制小数)。规范化的浮点数可以通过移动小数点的位置来表示不同大小的数值。
内存布局:
1位符号位(Sign)+ 8位指数位(Exponent)+ 23位尾数位(Mantissa)
根据上述规则,浮点数可以表示为以下形式:

其中:
S 表示符号位(0表示正数,1表示负数)。
M 表示尾数位。
E 表示指数位。
具体的浮点数存储规则取决于浮点数的位数。在IEEE 754标准中,常见的浮点数位数包括单精度(32位)和双精度(64位)。单精度浮点数使用1个符号位、8个指数位和23个尾数位,而双精度浮点数使用1个符号位、11个指数位和52个尾数位。




本文详细介绍了计算机中的数据类型,特别是整型和浮点类型的内存存储机制,包括原码、反码和补码的区别,以及大小端存储和IEEE754标准在浮点数存储中的应用。还涵盖了数组、结构体、指针等构造类型和空类型的介绍。





