ESP32-IDF中!运算符对uint8_t类型的作用解析及疑问
C语言逻辑非运算符
!的作用逻辑解析 在C语言中,逻辑非运算符!的规则非常明确,和你测试代码里的表现完全对应:
- 只要是非0的数值(不管是正、负,还是具体数值是2、3这类),经过
!运算后结果都是0 - 只有数值0,经过
!运算后结果才是1
结合你的测试代码逐行拆解:
- 初始
uint8_t i = 2:i是一个非0值,执行i = !i时,!2的结果是0,所以i被赋值为0,对应输出里的i = 0 - 接着再执行
i = !i:此时i的值是0,!0的结果是1,i被赋值为1,对应输出里的i = 1
至于ESP32-IDF闪烁代码里用led_state = !led_state;的原因:
LED控制逻辑里,led_state一般只会取0(灯灭)和1(灯亮)两个值,用!刚好能让0和1互相翻转,实现电平切换的效果。哪怕led_state意外变成了其他非0值,第一次!也会把它转为0,之后就会在0和1之间正常循环翻转了。
内容的提问来源于stack exchange,提问作者xiaopengyou
相关产品推荐
相关产品推荐

