0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C代码中看到连续“!!”

Q4MP_gh_c472c21 来源:最后一个bug 作者:bug菌 2022-04-24 09:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最近一直在居家办公,原本对居家办公还心存一丝幻想,想着把一天的工作提前做完,就可以留给自己更多的空间。

然而,当真正居家办公,才体会到其中的心塞与无奈,客户、售后电话的轮番轰炸、同事经常找不到人......等诸多问题,可把我给整麻了

进入正片:

1

!!操作

看到交流群里有朋友抛出一段C语言操作:
offset=len/64+!!(len%64);
这两个连续的感叹号把有些人给整蒙圈了,还有些朋友调侃道: !!表示语气加重,事情非常紧急得尽快处理,可把我给整笑了。其实都是常规操作吧,只是这样的写法在正常的编码过程中并不多见。首先这两个!!并不是什么C语言新的关键字,而是!运算符的嵌套作用。!在C语言中叫逻辑非运算符,是一种条件运算符。

		

语法形式:!(条件)

其中的条件如果是false,则最终整个表达式为true;反之则为false,bug菌提醒一句:要与~进行区分,~是按位取反,很多初学者容易混淆。

		

语法形式:!!(条件)

所以如上表达式就是两个!的嵌套形式。当然如果你想项目代码中变得无可替代,可以继续如下操作:
语法形式:!!!......!!(条件)
前提是你要自己能看懂。那么回到!!,该操作所达到的效果便是条件逻辑与最终表达式的逻辑结果保持一致:

		

!!(false)==false !!(非false)==true

而对于大部分编译器false对应的是0,而true对应的是1,所以很多同志拿着逻辑结果参与数值运算。

		

offset=len/64+!!(len%64);

该表达式的用处也非常清楚了,当len不能被64整除,则:

		

offset=len/64+1;

获得正确的数据分组个数,这代码应该是来源于存储或者通信中。但bug菌觉得,尽量还是不要操作:逻辑和数值运算最好是分开,以增加代码的可读性和可移植性。

2

还有个用处

最早看到这种处理方式是在判断一个引脚的高底电平上:


		

u8GPIOLevel= !!(GPIOA_Data & PIN_2);

!!在其中的作用跟之前是一样的,使得表达式的数据结果与条件中的逻辑保持一致,便可以直接获得结果。END 审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144644
  • 代码
    +关注

    关注

    30

    文章

    4942

    浏览量

    73160

原文标题:C代码中看到"!!",捻了把汗~

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Perforce QAC产品简介:面向C/C++的静态代码分析工具(已通过SO 26262认证)

    Perforce QAC专为C/C++开发者打造,支持多种编码规范、功能安全标准(ISO 26262)等,广泛用于汽车、医疗、嵌入式开发领域,可帮助快速识别关键缺陷、提升代码质量、实现合规交付。
    的头像 发表于 07-10 15:57 861次阅读
    Perforce QAC产品简介:面向<b class='flag-5'>C</b>/<b class='flag-5'>C</b>++的静态<b class='flag-5'>代码</b>分析工具(已通过SO 26262认证)

    FX2 I2C代码挂起的原因?

    逻辑分析仪中看到 SCL 和 SDA)。 当我将MULTICH_CONNECT_PCB SDL 线连接到 ESP8266 时,代码挂起。 说明 ; 1. 连接正确 . 2. FX2 KIT_A2G_TC387_MOTORCTR在 SCL 和 SDA 线上都有上拉 (2.2
    发表于 05-26 08:09

    当CY7C65215在两个通道上配置为 SPI 和 I2C 时,能否在Linux系统中看到两个设备?

    我的客户想知道,当 CY7C65215 在两个通道上配置为 SPI 和 I2C 时,他能否在 Linux 系统中看到两个设备。
    发表于 05-26 06:27

    fx3 uvc uart组合代码在usb 2.0中不起作用怎么解决?

    大家好,需要帮助/建议, 我已经在 fx3 中将 uvc 和 cdc(uart)代码组合在一起。 但是当我连接 USB 3.0 电缆时,我只能在 Windows 中看到 Fx3 和 COM 端口
    发表于 05-15 07:32

    基于STM32C8T6控制,FSR402压力传感器+oled屏幕显示代码

    基于STM32C8T6控制,FSR402压力传感器+oled屏幕显示代码
    发表于 04-14 15:06 6次下载

    如何为micropython添加自己的C代码库?

    部分代码需要更高效的效率 如何为micropython添加自己的C代码库? 是否有教程? 如果可以的话是否可以提供一个实现实例?
    发表于 03-11 07:03

    STM32CubeMX用于STM32配置和初始化C代码生成

    电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载
    发表于 02-26 17:32 678次下载

    代码加密、源代码防泄漏c/c++与git服务器开发环境

    代码加密对于很多研发性单位来说是至关重要的,当然每家企业的业务需求不同所用的开发环境及开发语言也不尽相同,今天主要来讲一下c++及git开发环境的源代码防泄密保护方案。企业源代码泄密
    的头像 发表于 02-12 15:26 884次阅读
    源<b class='flag-5'>代码</b>加密、源<b class='flag-5'>代码</b>防泄漏<b class='flag-5'>c</b>/<b class='flag-5'>c</b>++与git服务器开发环境

    分析C语言代码结构的设计问题

    来分析一个C语言代码结构的设计问题。 这段代码,使用了两次malloc,分别给 p1 和 p2 申请了内存。用完后,内存释放,防止内存泄漏。 大家觉得,这样的代码设计有没有问题。
    的头像 发表于 02-11 09:31 680次阅读

    单片机学习—C51源代码和Proteus仿真文件

    单片机学习—C51源代码和Proteus仿真文件.zip, 有各种例子
    发表于 02-10 13:46 2次下载

    EE-147:调整TigerSHARC DSP编译器的C代码

    电子发烧友网站提供《EE-147:调整TigerSHARC DSP编译器的C代码.pdf》资料免费下载
    发表于 01-15 16:11 0次下载
    EE-147:调整TigerSHARC DSP编译器的<b class='flag-5'>C</b>源<b class='flag-5'>代码</b>

    AN-840: 通过I2C接口更新代码

    电子发烧友网站提供《AN-840: 通过I2C接口更新代码.pdf》资料免费下载
    发表于 01-15 16:04 0次下载
    AN-840: 通过I2<b class='flag-5'>C</b>接口更新<b class='flag-5'>代码</b>

    EE-149: 调试Blackfin处理器编译C代码

    电子发烧友网站提供《EE-149: 调试Blackfin处理器编译C代码.pdf》资料免费下载
    发表于 01-08 14:48 0次下载
    EE-149: 调试Blackfin处理器编译<b class='flag-5'>C</b>源<b class='flag-5'>代码</b>

    EE-134:为SHARC系列编写C兼容汇编代码中断处理程序

    电子发烧友网站提供《EE-134:为SHARC系列编写C兼容汇编代码中断处理程序.pdf》资料免费下载
    发表于 01-07 13:58 0次下载
    EE-134:为SHARC系列编写<b class='flag-5'>C</b>兼容汇编<b class='flag-5'>代码</b>中断处理程序

    EE-132:使用VisualDSP将C代码和数据模块放入SHARC存储器中

    电子发烧友网站提供《EE-132:使用VisualDSP将C代码和数据模块放入SHARC存储器中.pdf》资料免费下载
    发表于 01-07 13:55 0次下载
    EE-132:使用VisualDSP将<b class='flag-5'>C</b><b class='flag-5'>代码</b>和数据模块放入SHARC存储器中