C语言学习日志2

【学习日志】2022.6.17——2022.6.19

来写写这几天的收获吧。

1. 程序中表示常量的例子
记事本的单价是15.6元,输出单价和购买2本记事本的金额。

#include<stdio.h>
#define PRICE 15.6
int main(void)
{
	printf("单价:%f\n",PRICE);  //定义符号常量PRICE,在程序中表述数值15.6 
	printf("金额:%f\n",PRICE*2);
	return 0;
}

因为PRICE是15.6,是实数,所以输出应该用%f,而不用%d。接下来我们可以来测试一下。
在这里插入图片描述
若我们把程序%f改为%d,我们将看到,所以这样肯定是错误的。
在这里插入图片描述

2. 变量的赋值及存储空间的查看

#include<stdio.h> 
int main(void)
{
	char c1,c2;
	c1=97;
	c2='b';
	printf("%c,%c\n",c1,c2);
	printf("%d,%d",c1,c2);
	return 0;
}

程序结果

a b
97 98

变量c1,c2的三要素如图所示

变量名存储单元内容存储单元长度对应ASCII字符
c1971 bytea
c2981 byteb

存储规则有两大类:整型、字符型、指针型数据属于同一类,都按整数规则处理;浮点数为一类,按照小数存储规则处理。

3. sizeof操作符测试数据类型的位长

#include<stdio.h>
int main(void)
{
	printf("int size=%d\n",sizeof(int));
	printf("short int size=%d\n",sizeof(short int));
	printf("long int size=%d\n",sizeof(long int));
	return 0;
}

程序结果

int size=4
short int size=2
long int size =4

说明:int size=4,表示运行以上程序的IDE,int长度是4byte.

4. 分别以字符和数值的形式输出‘a’ 'b’的代码

#include<stdio.h> 
int main(void)
{
	
	printf("%c,%c\n",'a','b'); //%c表示要以字符的形式输出数据 
	printf("%d,%d\n",'a','b'); //%d表示要以整数的形式输出数据 
	return 0;
}

程序结果

a,b
97,98

5. 实数的存储规则
先来看一个例子

#include<stdio.h> 
int main(void)
{
	float f=123.456;
	if(f==123.456) printf("Yes");
	else printf("No");
	printf("f=%f\n",f);
	return 0;
}

理论上应该输出为Yes才对,但是实际程序运行出来输出的是No,这是为什么呢?
究其原因,这是二进制表示法产生的误差,在计算机中以有限的32bit长度来反映无限的实数的集合,因此大多数情况下都是一个近似值。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

【总结】
从这里我们也可以了解到什么是偏移量,虽然之前在学51单片机写汇编的时候经常要用到偏移量,现在才稍微理解了一下。加偏移量的目的是让指数部分不会变成负数,方便运算。同时我们也能够知道float的精度为6~7位有效数字,double的精度最多为16位。整数和实数的存储规则是完全不同的,同一个数按照整数存储与按照实数存储其形式截然不同。当数据以某种类型存储时,除非你知道它的本质,不然不要试图用另外一种类型去读,否则会引起误差。

PS
这几天都忙着去弄stm32了,但是还是要继续坚持学写c啊,最重要的是摸清其中的本质,其实我很讨厌普通教科书上面冗长的概念,学会一门编程还是要多动手写代码,不断调试,这样我们也就自然而然的了解了概念的含义。道阻且长,一起加油吧。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值