【学习日志】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字符 |
---|---|---|---|
c1 | 97 | 1 byte | a |
c2 | 98 | 1 byte | b |
存储规则有两大类:整型、字符型、指针型数据属于同一类,都按整数规则处理;浮点数为一类,按照小数存储规则处理。
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啊,最重要的是摸清其中的本质,其实我很讨厌普通教科书上面冗长的概念,学会一门编程还是要多动手写代码,不断调试,这样我们也就自然而然的了解了概念的含义。道阻且长,一起加油吧。