找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3108|回复: 9
打印 上一主题 下一主题
收起左侧

C语言取反问题

[复制链接]
跳转到指定楼层
楼主
ID:135253 发表于 2020-7-10 11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#define    LED     1<<7
rGPFDAT=~LED;     //结果rGPFDAT=0xFFFFFF00

若将定义改为
#define    LED      0x80

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

在ADS1.2下,怎么结果就不一样呢?



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:795921 发表于 2020-7-10 12:13 | 只看该作者
0xFFFFF7F应该是正确的结果
回复

使用道具 举报

板凳
ID:764088 发表于 2020-7-10 13:41 | 只看该作者

这是 数据宏定义不同造成 ,LED本身 是无符号数还是有符号不同,您试着 将LED 及~LED打印值试试看。
回复

使用道具 举报

地板
ID:790644 发表于 2020-7-10 19:43 | 只看该作者
有符号数和无符号数的区别吧
回复

使用道具 举报

5#
ID:282850 发表于 2020-7-11 17:04 | 只看该作者
#define    LED     1<<7           有问题,看define的详细说明
所以rGPFDAT=~LED;结果是rGPFDAT =~1<<7的运算模式,本意是要 =~(1<<7)
~比<<优先3级。
回复

使用道具 举报

6#
ID:801733 发表于 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
回复

使用道具 举报

7#
ID:801829 发表于 2020-7-11 22:44 | 只看该作者
第一句需要括号括住,#define只是宏定义,在程序里面相当于替换,就会变成=~1<<7,取反运算符比左移运算符的优先级高,建议你以后写的时候这样:#define LED  (1<<7)
回复

使用道具 举报

8#
ID:135253 发表于 2020-7-12 11:04 | 只看该作者
robin1024 发表于 2020-7-11 19:13
#define    LED     1

多谢多谢
回复

使用道具 举报

9#
ID:135253 发表于 2020-7-12 11:04 | 只看该作者
f556 发表于 2020-7-11 17:04
#define    LED     1

多谢多谢
回复

使用道具 举报

10#
ID:135253 发表于 2020-7-12 11:05 | 只看该作者
谢谢楼上各位的回复解答!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表