找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3119|回復(fù): 9
打印 上一主題 下一主題
收起左側(cè)

C語言取反問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:135253 發(fā)表于 2020-7-10 11:12 | 只看該作者 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
#define    LED     1<<7
rGPFDAT=~LED;     //結(jié)果rGPFDAT=0xFFFFFF00

若將定義改為
#define    LED      0x80

rGPFDAT=~LED;     //結(jié)果rGPFDAT=0xFFFFF7F

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



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:795921 發(fā)表于 2020-7-10 12:13 | 只看該作者
0xFFFFF7F應(yīng)該是正確的結(jié)果
回復(fù)

使用道具 舉報

板凳
ID:764088 發(fā)表于 2020-7-10 13:41 | 只看該作者

這是 數(shù)據(jù)宏定義不同造成 ,LED本身 是無符號數(shù)還是有符號不同,您試著 將LED 及~LED打印值試試看。
回復(fù)

使用道具 舉報

地板
ID:790644 發(fā)表于 2020-7-10 19:43 | 只看該作者
有符號數(shù)和無符號數(shù)的區(qū)別吧
回復(fù)

使用道具 舉報

5#
ID:282850 發(fā)表于 2020-7-11 17:04 | 只看該作者
#define    LED     1<<7           有問題,看define的詳細(xì)說明
所以rGPFDAT=~LED;結(jié)果是rGPFDAT =~1<<7的運(yùn)算模式,本意是要 =~(1<<7)
~比<<優(yōu)先3級。
回復(fù)

使用道具 舉報

6#
ID:801733 發(fā)表于 2020-7-11 19:13 | 只看該作者
#define    LED     1<<7 寫法不規(guī)范,要加括號#define    LED    ( 1<<7)才行
因?yàn)榫幾g的時候LED并不是0x80,而是‘1<<7’這四個字符,所以當(dāng)~LED時,實(shí)際的語句是~1<<7,等同于(~1)<<7,結(jié)果就是0x00,對于32位MCU來說會自動補(bǔ)足前面的24位,變成0xFFFFFF00
回復(fù)

使用道具 舉報

7#
ID:801829 發(fā)表于 2020-7-11 22:44 | 只看該作者
第一句需要括號括住,#define只是宏定義,在程序里面相當(dāng)于替換,就會變成=~1<<7,取反運(yùn)算符比左移運(yùn)算符的優(yōu)先級高,建議你以后寫的時候這樣:#define LED  (1<<7)
回復(fù)

使用道具 舉報

8#
ID:135253 發(fā)表于 2020-7-12 11:04 | 只看該作者
robin1024 發(fā)表于 2020-7-11 19:13
#define    LED     1

多謝多謝
回復(fù)

使用道具 舉報

9#
ID:135253 發(fā)表于 2020-7-12 11:04 | 只看該作者
f556 發(fā)表于 2020-7-11 17:04
#define    LED     1

多謝多謝
回復(fù)

使用道具 舉報

10#
ID:135253 發(fā)表于 2020-7-12 11:05 | 只看該作者
謝謝樓上各位的回復(fù)解答!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表