标题: 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.51hei.com/bbs/) Powered by Discuz! X3.1