欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言取反問題 [打印本頁]

作者: xzf586    時間: 2020-7-10 11:12
標題: C語言取反問題
#define    LED     1<<7
rGPFDAT=~LED;     //結果rGPFDAT=0xFFFFFF00

若將定義改為
#define    LED      0x80

rGPFDAT=~LED;     //結果rGPFDAT=0xFFFFF7F

在ADS1.2下,怎么結果就不一樣呢?




作者: niceMCU    時間: 2020-7-10 12:13
0xFFFFF7F應該是正確的結果
作者: MikeCai    時間: 2020-7-10 13:41

這是 數據宏定義不同造成 ,LED本身 是無符號數還是有符號不同,您試著 將LED 及~LED打印值試試看。

作者: 小劉同學home    時間: 2020-7-10 19:43
有符號數和無符號數的區別吧
作者: f556    時間: 2020-7-11 17:04
#define    LED     1<<7           有問題,看define的詳細說明
所以rGPFDAT=~LED;結果是rGPFDAT =~1<<7的運算模式,本意是要 =~(1<<7)
~比<<優先3級。
作者: robin1024    時間: 2020-7-11 19:13
#define    LED     1<<7 寫法不規范,要加括號#define    LED    ( 1<<7)才行
因為編譯的時候LED并不是0x80,而是‘1<<7’這四個字符,所以當~LED時,實際的語句是~1<<7,等同于(~1)<<7,結果就是0x00,對于32位MCU來說會自動補足前面的24位,變成0xFFFFFF00
作者: kuangquanshui    時間: 2020-7-11 22:44
第一句需要括號括住,#define只是宏定義,在程序里面相當于替換,就會變成=~1<<7,取反運算符比左移運算符的優先級高,建議你以后寫的時候這樣:#define LED  (1<<7)
作者: xzf586    時間: 2020-7-12 11:04
robin1024 發表于 2020-7-11 19:13
#define    LED     1

多謝多謝
作者: xzf586    時間: 2020-7-12 11:04
f556 發表于 2020-7-11 17:04
#define    LED     1

多謝多謝
作者: xzf586    時間: 2020-7-12 11:05
謝謝樓上各位的回復解答!




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1