最近一直在居家辦公,原本對居家辦公還心存一絲幻想,想著把一天的工作提前做完,就可以留給自己更多的空間。
然而,當真正居家辦公,才體會到其中的心塞與無奈,客戶、售后電話的輪番轟炸、同事經(jīng)常找不到人......等諸多問題,可把我給整麻了
進入正片:1
!!操作
看到交流群里有朋友拋出一段C語言操作:
offset=len/64+!!(len%64);
這兩個連續(xù)的感嘆號把有些人給整蒙圈了,還有些朋友調(diào)侃道: !!表示語氣加重,事情非常緊急得盡快處理,可把我給整笑了。其實都是常規(guī)操作吧,只是這樣的寫法在正常的編碼過程中并不多見。首先這兩個!!并不是什么C語言新的關(guān)鍵字,而是!運算符的嵌套作用。!在C語言中叫邏輯非運算符,是一種條件運算符。語法形式:!(條件)
其中的條件如果是false,則最終整個表達式為true;反之則為false,bug菌提醒一句:要與~進行區(qū)分,~是按位取反,很多初學者容易混淆。語法形式:!!(條件)
所以如上表達式就是兩個!的嵌套形式。當然如果你想項目代碼中變得無可替代,可以繼續(xù)如下操作:
語法形式:!!!......!!(條件)
前提是你要自己能看懂。那么回到!!,該操作所達到的效果便是條件邏輯與最終表達式的邏輯結(jié)果保持一致:!!(false)==false !!(非false)==true
而對于大部分編譯器false對應的是0,而true對應的是1,所以很多同志拿著邏輯結(jié)果參與數(shù)值運算。offset=len/64+!!(len%64);
該表達式的用處也非常清楚了,當len不能被64整除,則:offset=len/64+1;
獲得正確的數(shù)據(jù)分組個數(shù),這代碼應該是來源于存儲或者通信中。但bug菌覺得,盡量還是不要操作:邏輯和數(shù)值運算最好是分開,以增加代碼的可讀性和可移植性。2
還有個用處
最早看到這種處理方式是在判斷一個引腳的高底電平上:
u8GPIOLevel= !!(GPIOA_Data & PIN_2);
!!在其中的作用跟之前是一樣的,使得表達式的數(shù)據(jù)結(jié)果與條件中的邏輯保持一致,便可以直接獲得結(jié)果。END 審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
C語言
+關(guān)注
關(guān)注
183文章
7649瀏覽量
146277 -
代碼
+關(guān)注
關(guān)注
30文章
4980瀏覽量
74463
原文標題:C代碼中看到"!!",捻了把汗~
文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
熱點推薦
在Keil中進行C代碼與匯編代碼的混合編程
1. 在 C 代碼中調(diào)用匯編程序代碼在 C 代碼中調(diào)用匯編程序中函數(shù)的方法:
第一步,在 C
發(fā)表于 01-23 06:36
講解C語言代碼的實現(xiàn)過程
重點講解C語言代碼的實現(xiàn)過程,算法的C語言實現(xiàn)過程具有一般性,通過PID算法的C語言實現(xiàn),可以以此類推,設計其它算法的C語言實現(xiàn)。
第一步:
發(fā)表于 01-21 07:58
c語言中的代碼優(yōu)化
寫好的代碼嵌入到當前程序,不會產(chǎn)生函數(shù)調(diào)用,因此僅僅是占用了空間,在頻繁調(diào)用同 一個宏的時候,該現(xiàn)象尤為突出。
舉例以下:
方法C:
#define bwMCDR2_ADDRESS 4
發(fā)表于 01-12 09:45
CS32L010系列能否支持串口的發(fā)送和接收中斷單獨配置?不同中斷的中斷優(yōu)先級如何設置?
1、串口能否配置成阻塞式發(fā)送和中斷式接收。
2、不同中斷的中斷優(yōu)先級如何設置?我在開啟中斷函數(shù)代碼中看到說中斷優(yōu)先級配置需要先調(diào)用NVIC_PriorityGroupConfig()函數(shù),但此函數(shù)無定義,全局搜索不到。
發(fā)表于 12-10 18:46
求助,關(guān)于C代碼中的printf打印的疑問求解
在使用E203 testbench執(zhí)行附帶的benchmark測試用例時候,得到如下打印信息:
CPU驗證小白一枚,有個問題不是很理解:黃色框框內(nèi)的字符看起來應該是C代碼中的printf語句
發(fā)表于 11-10 07:54
如何使用 ADC 測量電阻式觸摸的準確值?
://github.com/opennuvoton/m480bsp
2. 解壓文件并打開它,我們可以從示例代碼文件夾中看到一個 NuMaker-PFM-M487D 的文件夾。
您應該會看到兩個項目,一個是
發(fā)表于 09-05 07:01
rt-thread studio 編輯代碼時,使用ctrl+c復制代碼會閃退怎么解決?
rt-thread studio 編輯代碼時,使用ctrl+c復制代碼會閃退?
發(fā)表于 08-29 06:36
為什么當微控制器(MCU)用作I2C從機時,I2C_SCL連續(xù)接收數(shù)據(jù)時會出現(xiàn)時鐘拉伸?
為什么當微控制器(MCU)用作I2C從機時,I2C_SCL連續(xù)接收數(shù)據(jù)時會出現(xiàn)時鐘拉伸?
發(fā)表于 08-26 08:05
為什么當微控制器 (MCU) 用作 I2C 從機時,I2C_SCL在接收連續(xù)數(shù)據(jù)時會出現(xiàn)時鐘拉伸?
為什么當微控制器 (MCU) 用作 I2C 從機時,I2C_SCL在接收連續(xù)數(shù)據(jù)時會出現(xiàn)時鐘拉伸
發(fā)表于 08-21 06:32
Perforce QAC產(chǎn)品簡介:面向C/C++的靜態(tài)代碼分析工具(已通過SO 26262認證)
Perforce QAC專為C/C++開發(fā)者打造,支持多種編碼規(guī)范、功能安全標準(ISO 26262)等,廣泛用于汽車、醫(yī)療、嵌入式開發(fā)領(lǐng)域,可幫助快速識別關(guān)鍵缺陷、提升代碼質(zhì)量、實現(xiàn)合規(guī)交付。
請問在CYBLE-333074-EVAL-M2B中SPI應使用哪些引腳?
您好,我正在使用模塊 CYBLE-333074-EVAL-M2B
,我在數(shù)據(jù)表中看到可以使用 SPI,我想通過 SPI 將模塊 CYBLE-333074-EVAL-M2B 與外部閃存通信
,您能
發(fā)表于 07-02 06:13
使用 CY4500 EZ-PD 協(xié)議分析器實用程序來調(diào)試USB類型C應用程序,無法在 “詳細信息” 窗口中找到 \" HPD 狀態(tài)\"怎么解決?
; HPD 狀態(tài)\"。
我怎樣才能在詳細信息窗口中看到 \" HPD 狀態(tài)\"解碼結(jié)果行?
發(fā)表于 05-28 07:05
FX2 I2C代碼掛起的原因?
邏輯分析儀中看到 SCL 和 SDA)。
當我將MULTICH_CONNECT_PCB SDL 線連接到 ESP8266 時,代碼掛起。
說明 ;
1. 連接正確 .
2. FX2 KIT_A2G_TC387_MOTORCTR在 SCL 和 SDA 線上都有上拉 (2.2
發(fā)表于 05-26 08:09
當CY7C65215在兩個通道上配置為 SPI 和 I2C 時,能否在Linux系統(tǒng)中看到兩個設備?
我的客戶想知道,當 CY7C65215 在兩個通道上配置為 SPI 和 I2C 時,他能否在 Linux 系統(tǒng)中看到兩個設備。
發(fā)表于 05-26 06:27
fx3 uvc uart組合代碼在usb 2.0中不起作用怎么解決?
大家好,需要幫助/建議,
我已經(jīng)在 fx3 中將 uvc 和 cdc(uart)代碼組合在一起。 但是當我連接 USB 3.0 電纜時,我只能在 Windows 中看到 Fx3 和 COM 端口
發(fā)表于 05-15 07:32
C代碼中看到連續(xù)“!!”
評論