32位的mcu上面,取反怎么写,~还是!?

[复制链接]
1480|14
 楼主| 静听风易 发表于 2017-9-22 21:48 | 显示全部楼层 |阅读模式
32位的mcu上面,取反怎么写,~还是!?
萧洛毫 发表于 2017-9-23 20:58 | 显示全部楼层
~是按位取反,!是非,两者不一样的
jerow 发表于 2017-9-23 21:01 | 显示全部楼层
那为什么我在51中用~和!的结果都是一样的呢?
余三水 发表于 2017-9-24 14:59 | 显示全部楼层
jerow 发表于 2017-9-23 21:01
那为什么我在51中用~和!的结果都是一样的呢?

你操作的是位变量吧,只有在位变量中,两者才是通用的
jerow 发表于 2017-9-24 15:02 | 显示全部楼层
因为整形是32位有符号补码整数表示的。因此将整形转换为二进制后为:
a  
十进制 0
二进制 0000 0000 0000 0000 0000 0000 0000 0000
~a的二进制 1111 1111 1111 1111 1111 1111 1111 1111 (补码)
~a转换为原码
第一步:减1
1111 1111 1111 1111 1111 1111 1111 1110
第二步: 取反(符号位不变)
1000 0000 0000 0000 0000 0000 0000 0001 (原码 即值为1)
yyj8902 发表于 2017-9-24 21:53 | 显示全部楼层
51中~和!一样,因为只有两种状态
16号哨兵 发表于 2017-9-24 21:56 | 显示全部楼层
那假如我一个数是3,~和!的结果分别是什么呢?
余三水 发表于 2017-9-26 21:24 | 显示全部楼层
16号哨兵 发表于 2017-9-24 21:56
那假如我一个数是3,~和!的结果分别是什么呢?

3~的结果是1100,应该是12,!的结果应该是0
ylslib 发表于 2017-9-26 21:30 | 显示全部楼层
按位取反运算是单目运算,用来求一个位串信息按位的反,即哪些为0的位,结果是1,而哪些为1的位,结果是0。例如, ~7的结果为0xfff8。
LM莫 发表于 2017-9-27 21:25 | 显示全部楼层
一个叫按位取非,一个叫取非,后者是整体取非的
Boooooosh 发表于 2017-9-27 21:39 | 显示全部楼层
对于 ! 运算符, 如果 expression 不为零,则 result 为零。 如果表达式 为零,则结果 为 1。
麦克塔维什 发表于 2017-9-28 15:46 | 显示全部楼层
~ 运算符查看表达式的二进制表示形式的值,并执行按位求非运算。
表达式中的任何一位为 1,则结果中的该位变为 0。 表达式中的任何一位为 0,则结果中的该位变为 1。
Elric_QZH 发表于 2017-9-28 15:49 | 显示全部楼层
取反(~)运算符:对操作数的每一位都取反,如~01100111为10011000
逻辑非(!)运算符:若n为0,则!n为1;否则!n为0
junpeng324 发表于 2017-9-29 21:19 | 显示全部楼层
引用SYS文件不就可以跟51一样进行操作了。
jerow 发表于 2017-10-26 18:31 | 显示全部楼层
余三水 发表于 2017-9-24 14:59
你操作的是位变量吧,只有在位变量中,两者才是通用的

是的,确实只有位变量才是通用的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

231

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部