文章目录
- 前言
- 一、数据类型的介绍
- 类型的意义
- 1. 类型的基本归类
- (1). 整型家族
- (2). 浮点数家族
- (3). 构造类型
- (4). 指针类型
- (5). 空类型
- 二、整型在内存中的存储
- 1. 原码、反码、补码
- 2. 大小端介绍
- 写一个程序判断你的电脑用大端还是小端字节序排列
- 3. 练习
- 总结
前言
C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习
一、数据类型的介绍
char // 字符数据类型 // 1
short // 短整型 // 2
int // 整型 // 4
long // 长整型 // 4 / 8
long long // 更长的整型 // 8
float // 单精度浮点型 // 4
double // 双精度浮点型 // 8
- long 在32位电脑上位 4 个字节, 64位电脑上 8 个字节。
- long 在标准中只定义了 sizeof(long) >= sizeof(int)。
- long long 是 c99 定义的新的类型
类型的意义
- 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
- 计算机如何看待内存空间的视角,若为整型,则认为它是整数,若为浮点型,就认为浮点数。
1. 类型的基本归类
1:40
(1). 整型家族
- char类型在内存中存储以ASCII码值的形式存储,所以也归入整型家族。
- 除了char类型
char
unsigned char
signed char
------------------
short
unsigned short
signed short
------------------
int
unsigned int
signed int
------------------
long
unsigned long
signed long
------------------
long long
unsigned long long
signed long long
------------------
float
unsigned float
signed float
------------------
double
unsigned double
signed double
(2). 浮点数家族
- float
- double
(3). 构造类型
- 每创建一个数组,相当于构造了一个类型。
- 比如 int arr[10] = {0};
- 创建的类型为 int [10] 类型。
- 数组类型
- 结构体类型 struct
- 枚举类型 enum
- 联合类型 union
(4). 指针类型
- int* pi;
- char* pc;
- float* pf;
- void* pv;
(5). 空类型
- void 表示空类型
- 通常应用于函数的返回值类型、函数的参数、指针类型。
二、整型在内存中的存储
1. 原码、反码、补码
- 计算机中的整数右三种2进制表示方法即原码、反码和补码。
- 三种表示方法均有符号位和数值位两部分,符号位都是用0表示正,用1表示负。
- 数值为 正数的原码、反码、补码都相同。
- 负整数的三种表示方法各不相同。
-
- 原码: 直接将数值按照正负数的形式翻译成二进制就可以得到原码。
-
- 反码: 原码符号位不变,其余位数按位取反得到反码。
-
- 补码: 反码加1,得到补码。
- 对于整数,在内存中存放的是补码。
- 原因如下
- 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;
- 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与源码相互转换,其运算过程是相同的,不需要额外的硬件电路。
比如(以1-1)为例:
cpu只有加法器,所以可以理解为 1 + (-1)
1 的原码
00000000000000000000000000000001
-1 的原码
10000000000000000000000000000001
1 + -1
10000000000000000000000000000010 ---- 结果为-2,显然不合理
-------------------------------------------------------------
若用补码
1 的补码 (正数原码和补码相同)
00000000000000000000000000000001
-1 的原码
10000000000000000000000000000001
-1 的反码
11111111111111111111111111111110
-1 的补码
11111111111111111111111111111111
此时 1 的补码 加 -1 的补码
00000000000000000000000000000001 +
11111111111111111111111111111111
100000000000000000000000000000000
结果有33个比特位,但整型只能由32个比特位,最高位的1省去,得到0
2. 大小端介绍
- 内存中的数据以二进制位存储,但可以以16进制显示,方便我们观察。
- 若现在有整数的二进制序列为
- 00010001001000100011001101000100
00010001001000100011001101000100 --- 这个为内存中的二进制位
将这个二进制位转化为16进制,方便说明
0x 11 22 33 44
见下图
- 大小端排列取决于硬件。
写一个程序判断你的电脑用大端还是小端字节序排列
#include <stdio.h>
int main()
{int a = 1;int* pa = &a;char* pb = (char*)pa;if (1 == *pb){printf("小端\n");}else if(0 == *pb){printf("大端\n");}else{printf("奇怪了\n");}return 0;
}
3. 练习
// 1. 输出什么
#include <stdio.h>
int main()
{char a = 1;signed char b = -1;unsigned char c = -1;printf("a=%d,b=%d,c=%d", a, b, c);// 1 -1 255return 0;
}
// 2.输出什么
#include <stdio.h>
int main()
{char a = -128;printf("%u\n", a);// 4294967168return 0;
}
// 3. 输出什么
#include <stdio.h>
int main()
{char a = 128;printf("%u\n", a);// 4294967168return 0;
}
// 4. 输出什么
#include <stdio.h>
int main()
{int i = -20;unsigned int j = 10;printf("%d\n", i + j); // -10return 0;
}
总结
C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习