You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-IDF中!运算符对uint8_t类型的作用解析及疑问

C语言逻辑非运算符!的作用逻辑解析

在C语言中,逻辑非运算符!的规则非常明确,和你测试代码里的表现完全对应:

  • 只要是非0的数值(不管是正、负,还是具体数值是2、3这类),经过!运算后结果都是0
  • 只有数值0,经过!运算后结果才是1

结合你的测试代码逐行拆解:

  1. 初始uint8_t i = 2:i是一个非0值,执行i = !i时,!2的结果是0,所以i被赋值为0,对应输出里的i = 0
  2. 接着再执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:52:11