找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1862|回复: 14
收起左侧

这个C语言代码怎么理解?

  [复制链接]
ID:656213 发表于 2021-11-1 23:46 | 显示全部楼层 |阅读模式
#define        I_SW        !P30                                           uint8_t        Sig;

Sig        =        I_SW?        1: 0;      //条件选择

看下面,是不是这样的?
!P30 = 1 ,  Sig = 1
!P30 = 0 ,  Sig = 0





回复

使用道具 举报

ID:908826 发表于 2021-11-2 08:12 | 显示全部楼层
三目运算符,我觉得是这样,因为我也是这样理解的,蹲一蹲大佬
回复

使用道具 举报

ID:752974 发表于 2021-11-2 08:40 | 显示全部楼层
对头!!!!!
回复

使用道具 举报

ID:276663 发表于 2021-11-2 09:10 | 显示全部楼层
是的,理解正确。
回复

使用道具 举报

ID:277550 发表于 2021-11-2 09:57 | 显示全部楼层
#define        I_SW        !P30


uint8_t        Sig;

Sig    =    I_SW?1: 0;      

是三目运算,如果I_SW是TRUE,Sig=1,否则Sig=0。

本例中,就是P30==0则Sig=1,否则Sig=0;

这个是C语言的基础知识。


回复

使用道具 举报

ID:656213 发表于 2021-11-2 10:36 | 显示全部楼层
devcang 发表于 2021-11-2 09:57
#define        I_SW        !P30

其实这里我主要是迷惑在 !符号这里了,如果不加这个符号,#define  I_SW  P30,   这样就好理解多了。谢谢大师指点!
回复

使用道具 举报

ID:656213 发表于 2021-11-2 10:46 | 显示全部楼层
devcang 发表于 2021-11-2 09:57
#define        I_SW        !P30

另外,还想请教一个问题,全局变量,没有赋值,那么第一次使用的时候是不是默认是 0 ?
回复

使用道具 举报

ID:976967 发表于 2021-11-2 11:47 | 显示全部楼层
I_SW是P30取反,然后Sig是将I_SW这个bool量转为int,也就是P30>0—>I_SW是false—>Sig=1,P30≤0—>I_SW是true—>Sig=0
回复

使用道具 举报

ID:976967 发表于 2021-11-2 11:49 | 显示全部楼层
宏定义、取反、三目运算
回复

使用道具 举报

ID:229375 发表于 2021-11-2 11:58 | 显示全部楼层
jiahz2019 发表于 2021-11-2 10:46
另外,还想请教一个问题,全局变量,没有赋值,那么第一次使用的时候是不是默认是 0 ?

这个要看单片机具体实现,一般来说是默认初始化为0,但我使用的锦瑞单片机不是这样0..0
回复

使用道具 举报

ID:883242 发表于 2021-11-2 12:00 | 显示全部楼层
jiahz2019 发表于 2021-11-2 10:46
另外,还想请教一个问题,全局变量,没有赋值,那么第一次使用的时候是不是默认是 0 ?

看startup.a51,你的判断是对的。但是可以修改这个文件让对应的全局变量不为0。
回复

使用道具 举报

ID:976580 发表于 2021-11-2 12:02 | 显示全部楼层
3目运算符
回复

使用道具 举报

ID:656213 发表于 2021-11-2 14:29 | 显示全部楼层
河边洗脚人 发表于 2021-11-2 11:58
这个要看单片机具体实现,一般来说是默认初始化为0,但我使用的锦瑞单片机不是这样0..0

这么巧,我现在看的这个程序也是锦锐的,CA51F351S4 ,  能否详细讲解一下?
回复

使用道具 举报

ID:624769 发表于 2021-11-2 14:44 | 显示全部楼层
jiahz2019 发表于 2021-11-2 14:29
这么巧,我现在看的这个程序也是锦锐的,CA51F351S4 ,  能否详细讲解一下?

所有的单片机, 上电之后,  内存(即声明变量存放的地方)里面的数据都是随机的,为0的概率几乎没有。所以,大多数单片机,编程的时候都会包含一个startup.a51的文件,它的作用就是把所有的内存地址全都置0(这个过程本身也是花费时间的,而并不是所有变量,你都需要他初始为0的,所以有的人会不包含这个文件,声明变量的时候直接赋值),所以,如果你希望初始是0,而不知道为什么,你单片机编译不自动包含startup.a51, 那么最简单直接的方法,就是自己在声明变量的时候,就给他赋值0。
回复

使用道具 举报

ID:71233 发表于 2021-11-2 15:44 | 显示全部楼层
这种写法编译后占用空间相对较大
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表