嵌入式学习 C语言语句与隐式转换

本文详细介绍了GCC编译器的编译过程,包括预处理、编译、汇编和链接阶段。同时探讨了语句与表达式、显示与隐式转换、混合运算的数据类型转换规则,以及逻辑运算符、逗号运算符和运算符优先级。最后,讨论了浮点数比较时的精度处理方法。
摘要由CSDN通过智能技术生成

目录

gcc编译器编译过程

语句与表达式

显示转换

隐式转换

混合运算过程中数据类型转换

赋值运算过程中的数据类型转换

数据类型隐式转换的方式

逻辑运算符

逗号运算符

运算符优先级结合性

思考 两个浮点数比较大小


gcc编译器编译过程


(1)预处理阶段 处理与#相关的预处理指令
gcc-E  XXX.c -o xxx.i

//预处理#include #define

(2)编译阶段 预处理产生的C语言程序编译为 汇编语言
gcc -S XXX.c -o xxx.s
(3)汇编阶段 将编译阶段产生的汇编语言翻译为二进制机器语言
gcc -C XXX.c -o xxx.o
(4)链接阶段 将汇编阶段 产生的二进制机器语言翻译链接可执行程序

//ESC ISO//
 

语句与表达式

语句:以;结尾的代码

表达式占据空间为临时空间



显示转换


(数据类型)变量 常量 表达式
 

int a=100,b=200;
printf("a/b=%f\n",(float)a/b);

只在当次转化时有效不根本改变操作数类型数在内存中的存储形式 

将原有的数据类型转换为指定类型
int a;
(long)a;d


隐式转换
混合运算过程中数据类型转换


原则 1. 浮点型 >整型 以及整型兼容性数据类


    2.大空间的数据类型高于小空间数据类型精度


    3.无符号数据 精度高于 有符号 数据类型的精度

    4.所在位置越高,权重越高。


赋值运算过程中的数据类型转换


由右值的数据类型向左值的数据类型转换
 

 

数据类型隐式转换的方式

1.整型及整型兼容性数据转换
(1)等空间向等空间
    数据原样拷贝


(2)小空间向大空间
    被转换类型原先有符号 符号位扩展
    无符号数 高位补0


(3)大空间向小空间转换
    赋值 截取数据低位

 
2.浮点型数据 》 整型及整型兼容型//取整


3.整型及整型兼容性数据  》浮点型

小数部分拓展


4.单精度向》精度转换
精度扩展


5.双精度向单精度
精度损失


运算符

(1)sizeof运算符(单目) 在编译过程中计算sizeof

sizeof(变量名, 数据类型名, 常量,表达式);

(2)% 取余运算符//浮点数不支持取余运算


    num =模*模数+余数


(3)++自增--自减运算符 //单目运算符


    自增 自减 操作数只能是变量


a++//先用后加(加之前的值作为a++ 表达式所使用)


++a//先加后用(加之后的值作为++a表达式所使用)


(4)赋值运算 将右边的复制到左边


赋值表达式的值取最左边操作数的值

赋值不等于初始化

逻辑运算符

1 非零值真     0 假
&&     既要... 又要... //  一假全假
||           //  是...或者...

!逻辑非        真变假    假变真
注意

(1).短路法则 :左操作数已确定执行完毕 已确定表达式整体的结果,则短路右操作数的执行
(2).浮点型数据的关系判断:在有限的精度范围内判断。


逗号运算符

(多目运算符  )//目数取决于有多上个逗号
表达式的值取最后一个子表达式的值作为逗号表达式的值


运算符优先级结合性


优先级 :单目 高于 双目 高于 三目 高于 多目
双目  算数运算符 高于 关系运算符 高于 逻辑运算符


注意 赋值运算符 双目 小于三目
结合方向 自左至右

从右至左特殊情况
自由致左 ;1.单目运算符2. 特殊运算符3.赋值运算符

思考 两个浮点数比较大小

要想比较两个浮点数的大小 首先确认一个精度,用两个浮点数相减之后的值与精度比较。

#include <stdio.h>
#include<math.h>
#include<float.h>
#define EPSILON 0.0000001//宏定义一个精度
int main()
{
	double a = 1.0;
	double b = 0.1;
	//使用自定义精度计算		
	if((a-b) < EPSILON || (a-b)>EPSILON)
	{
		printf("a");
	}
	else
		printf("b");
	/*
	使用库中精度和绝对值函数
if (fabs(a) - b < DBL_EPSILON)
	printf("a");
else
printf("b");*/
	return 0;
	
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值