C语言数据储存(保姆级教学)

unsighed和sighed的区别、

这里都用short来打比方

unsighed表示无符号,sighed表示有符号。
在数据储存中,最高位表示符号位
在这里插入图片描述

不知道第二个-32767怎么来的,后面会有讲到

根据上面的图片可以得出,有符号和无符号的差别的是很大的,有时候一个小的差错就会导致完全不一样的结果

总结:如果是有符号数就可以放到short(sighed short)里面
如果是无符号数就可以放到unsighed short里面(因为取值范围会比对应的有符号数会变大)

整形家族

以下是上课截的图片

在这里插入图片描述

原码,反码和补码

前面一个文章已经详细的解释道了,这里就不过多解释

大小端字节序储存

概念

大端字节序储存

数据的高字节(大端)保存到内存的低地址,数据的低字节保存到内存的高地址

小端字节序储存

数据的低字节(小端)保存到内存的低地址,数据的高字节保存到内存的高地址

例子

用0x12563478

在这里插入图片描述

练习(关于整数在内存中的储存)

1.以下代码运行结果是多少

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

在这里插入图片描述
步骤就是从鲜红框到暗红框,相信不需要太多的解释,只有一个就是%u表示的是以无符号整数打印。
图片的最后一行不需要转换为补码,因为%u形式输出就会认为是正数。

总结:整形提升提升的是变量本身的变量类型,而不是看打印的方式
比如上面的a,本身类型是char(有符号类型),所以就按有符号位来输出(1),
而不是因为是%u形式打印,所以就以无符号位输出,全部补0

2.以下程序运行结果是多少

#include <stdio.h>
int main()
{
	int i = 0;
	unsigned int j = 0;
	printf("%d\n",i + j);
}

在这里插入图片描述
步骤同样是鲜红框,蓝框和暗红框,值得一提的就是因为以%d形式打印,表示的是有符号数打印,
所以就要转换为原码

总结:如果是有符号数打印的话(%d),那么就需要将补码转换为原码

3.以下程序的运行结果是多少

#include <stdio.h>
int main()
{
	unsigned int i;
	for(i = 9; i >= 0; i--)
	{
		printf("%u\n",i);
	}
}

步骤如下面图片所示
在这里插入图片描述
所以打印的结果就是从9~0,再从4294967295到0,然后又到4294967295到0,一直循环上面的操作

  1. 以下程序的运行结果是多少
#include <stdio.h>
int main()
{
	char a[1000];
	int i;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;
	}
	printf("%d",strlen(a));
	return 0;
}

相信读者可能看到或者刷过这种题目,答案就是255
题目解决的关键点就是strlen是求字符串长度的
而计算原理是:
找到’\0’,并计算’\0’前面的所有字符数再输出

在这里插入图片描述
步骤是从左到右,总之就是细心细心再细心就完了

浮点数在内存中的储存

浮点数怎么转化为能储存的数字

根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数v都可以表示成下面的形式
(也是上课截的图片)在这里插入图片描述

举个例子
5.5

  1. 先把5.5转换为二进制数字,先转换小数点前面的,
    5—101
    再转换小数点后面的
    0.5—2*2^(-1)—.1

因为如果是十进制数(就以上面的5.5为例)
5.5 = 5 * 10^1 + 5 * 10^(-1)
所以小数点后面第一位就表示“进制数^(-1)”

所以5.5转换为二进制就是101.1

  1. 把二进制数转换为有效数字M,同时找到E
    就是把上面的转换为1.011 * 2^2
    这里的1.011就是M
    这里的2就表示E(是^后面的2)

  2. 最后一个S就看符号位就行
    0表示正数,1表示负数

在这里插入图片描述

浮点数是如何被存放到内存中的

浮点数储存到内存中只需要S,M和E这三个值

在这里插入图片描述

浮点数在内存中的储存情况如上所示

这里对浮点数的一些特殊情况不做阐述,本人没有对这些内容进行深入研究

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值