最近一直在居家辦公,原本對(duì)居家辦公還心存一絲幻想,想著把一天的工作提前做完,就可以留給自己更多的空間。
然而,當(dāng)真正居家辦公,才體會(huì)到其中的心塞與無(wú)奈,客戶、售后電話的輪番轟炸、同事經(jīng)常找不到人......等諸多問(wèn)題,可把我給整麻了
進(jìn)入正片:1
??!操作
看到交流群里有朋友拋出一段C語(yǔ)言操作:
offset=len/64+!!(len%64);
這兩個(gè)連續(xù)的感嘆號(hào)把有些人給整蒙圈了,還有些朋友調(diào)侃道: !!表示語(yǔ)氣加重,事情非常緊急得盡快處理,可把我給整笑了。其實(shí)都是常規(guī)操作吧,只是這樣的寫(xiě)法在正常的編碼過(guò)程中并不多見(jiàn)。首先這兩個(gè)!!并不是什么C語(yǔ)言新的關(guān)鍵字,而是!運(yùn)算符的嵌套作用。!在C語(yǔ)言中叫邏輯非運(yùn)算符,是一種條件運(yùn)算符。語(yǔ)法形式:!(條件)
其中的條件如果是false,則最終整個(gè)表達(dá)式為true;反之則為false,bug菌提醒一句:要與~進(jìn)行區(qū)分,~是按位取反,很多初學(xué)者容易混淆。語(yǔ)法形式:!!(條件)
所以如上表達(dá)式就是兩個(gè)!的嵌套形式。當(dāng)然如果你想項(xiàng)目代碼中變得無(wú)可替代,可以繼續(xù)如下操作:
語(yǔ)法形式:!!!......!!(條件)
前提是你要自己能看懂。那么回到!!,該操作所達(dá)到的效果便是條件邏輯與最終表達(dá)式的邏輯結(jié)果保持一致:!!(false)==false !!(非false)==true
而對(duì)于大部分編譯器false對(duì)應(yīng)的是0,而true對(duì)應(yīng)的是1,所以很多同志拿著邏輯結(jié)果參與數(shù)值運(yùn)算。offset=len/64+!!(len%64);
該表達(dá)式的用處也非常清楚了,當(dāng)len不能被64整除,則:offset=len/64+1;
獲得正確的數(shù)據(jù)分組個(gè)數(shù),這代碼應(yīng)該是來(lái)源于存儲(chǔ)或者通信中。但bug菌覺(jué)得,盡量還是不要操作:邏輯和數(shù)值運(yùn)算最好是分開(kāi),以增加代碼的可讀性和可移植性。2
還有個(gè)用處
最早看到這種處理方式是在判斷一個(gè)引腳的高底電平上:
u8GPIOLevel= !!(GPIOA_Data & PIN_2);
!!在其中的作用跟之前是一樣的,使得表達(dá)式的數(shù)據(jù)結(jié)果與條件中的邏輯保持一致,便可以直接獲得結(jié)果。END 審核編輯 :李倩-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7645瀏覽量
145827 -
代碼
+關(guān)注
關(guān)注
30文章
4972瀏覽量
74097
原文標(biāo)題:C代碼中看到"!!",捻了把汗~
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
在Keil中進(jìn)行C代碼與匯編代碼的混合編程
講解C語(yǔ)言代碼的實(shí)現(xiàn)過(guò)程
c語(yǔ)言中的代碼優(yōu)化
CS32L010系列能否支持串口的發(fā)送和接收中斷單獨(dú)配置?不同中斷的中斷優(yōu)先級(jí)如何設(shè)置?
rt-thread studio 編輯代碼時(shí),使用ctrl+c復(fù)制代碼會(huì)閃退怎么解決?
為什么當(dāng)微控制器(MCU)用作I2C從機(jī)時(shí),I2C_SCL連續(xù)接收數(shù)據(jù)時(shí)會(huì)出現(xiàn)時(shí)鐘拉伸?
為什么當(dāng)微控制器 (MCU) 用作 I2C 從機(jī)時(shí),I2C_SCL在接收連續(xù)數(shù)據(jù)時(shí)會(huì)出現(xiàn)時(shí)鐘拉伸?
Perforce QAC產(chǎn)品簡(jiǎn)介:面向C/C++的靜態(tài)代碼分析工具(已通過(guò)SO 26262認(rèn)證)
請(qǐng)問(wèn)在CYBLE-333074-EVAL-M2B中SPI應(yīng)使用哪些引腳?
使用 CY4500 EZ-PD 協(xié)議分析器實(shí)用程序來(lái)調(diào)試USB類(lèi)型C應(yīng)用程序,無(wú)法在 “詳細(xì)信息” 窗口中找到 \" HPD 狀態(tài)\"怎么解決?
FX2 I2C代碼掛起的原因?
當(dāng)CY7C65215在兩個(gè)通道上配置為 SPI 和 I2C 時(shí),能否在Linux系統(tǒng)中看到兩個(gè)設(shè)備?
fx3 uvc uart組合代碼在usb 2.0中不起作用怎么解決?
深入理解C語(yǔ)言:C語(yǔ)言循環(huán)控制
C代碼中看到連續(xù)“??!”
評(píng)論