C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端等介绍


前言

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. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
  2. 计算机如何看待内存空间的视角,若为整型,则认为它是整数,若为浮点型,就认为浮点数。

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 255

	return 0;
}

// 2.输出什么
#include <stdio.h>
int main()
{
	char a = -128;
	printf("%u\n", a);// 4294967168
	return 0;
}

// 3. 输出什么
#include <stdio.h>
int main()
{
	char a = 128;
	printf("%u\n", a);// 4294967168
	return 0;
}
// 4. 输出什么
#include <stdio.h>
int main()
{
	int i = -20;
	unsigned int j = 10;
	printf("%d\n", i + j); // -10

	return 0;
}

总结

C语言数据类型的介绍,类型的基本归类,整型在内存中的存储,原码、反码、补码,大小端介绍,以及练习

  • 27
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值