【c语言】【visual studio】带你一步一步轻松了解 int 类型以%f输出,char 类型以 %d输出,float类型以%d输出等等是如何输出的。

引言:看本文章之前,还需了解数据在内存中的是以二进制的补码存储的,以及整型和浮点型的存储方式的不同。(具体可看这篇博客)

   【c语言】【visual studio】带你了解浮点型和整型在内存中的储存方式。-CSDN博客

规则:

数据存储拿取步骤(以x86环境为例)存a
存储
1.先都是32位二进制存储。——按存储规则存储。
拿出
2.看放置类型,若是char类型只拿低位8位,若是short 只拿低位16.放到类型中——看放置类型,拿取低位位数
提升
3.整型提升提升为32位。提升原则:看a的类型是什么,有符号高位添加符号位至32位,无符号高位添加0至32位。——看放置类型,整型提升
打印
4.看以什么格式输出。例如我以%d的格式(有符号整型)数据在内存中是补码存储,打印是原码。所以要换成原码。符号位不变,-1,按位取反,得到原码。最后输出。——看输出类型,打印数据。

1.float如何以%d输出

我们以代码举例

#include <stdio.h>
int main()
{
	int n = 9;
	float *pa = &n;
	*pa = 2.5;
	printf("%d ", n);
	printf("%f ", *pa);
	return 0;
}

结果输出:

注:这里我为什么这么写,而不是直接用float类型,用float类型变量这里就设计double提升的概念了,我们这里主要探讨的是浮点型存储的数以%d输出,这样写才满足我们探讨的要求。

结果为什么结果这么奇怪呢?

我们按照我们的规则算一遍:

2.字符型以%d打印又是怎么样的呢?

我们接着看这样一个代码:

#include <stdio.h>
int main()
{
	unsigned char a = -1;
	printf("%d", a);
	return 0;
}

结果输出:

同样我们算一遍:

3.那我们int类型以%f输出呢?

我们接着看:

#include <stdio.h>
int main()
{
	int a = 5;
	printf("%f", a);
	return 0;
}


输出结果为:

同样我们算一遍:

总结,做完这些例题后,我们不难发现步骤其实很简单:

1.数据存储。

2.看要变量类型,决定怎么拿bit位,以及要不要整型提升。

3.看打印类型,决定这是什么类型的变量,再以次类型的转化原则转化,再打印。

实际上就是一个数据在两种类型下理解的不同,所以结果就有所不同而已。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值