按位或这么用是什么意思?

piginthetree 2009-02-22 09:37:32
int main( void )
{
int n = 10;
int m = 20;
printf("%d\n", (m |+ n)); /* |+ ??? */

return 0;
}
...全文
348 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
ohxf1234 2009-02-26
  • 打赏
  • 举报
回复
这里存在着优先级的问题和C语言如何解决操作符的问题

首先是解决操作符的问题:字符一个一个的被读入到缓冲区中,然后又一个一个的判断是否还能够构成其他的操作符
此处符号判断出这里有两个符号,一个是|,另一个是+

其次就是符号的优先级问题:+(此处的+是单目运算符,优先级较高)的优先级比|高,所以先执行+n,同时根据结合律
就有了m|(+n),所以结果就是楼主所说的
piginthetree 2009-02-26
  • 打赏
  • 举报
回复
楼上有些回复是错误的哈, 现在我明白了, a |+ b 等价于 a | (+b), a |- b等价于 a | (-b).谢谢大家.
littlewinds 2009-02-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happytang 的回复:]
编译器进行优化了
m|+n and m|n and m+n都是一样的
[/Quote]

...

还有这回事...我落伍了!
学习!!!
雨过白鹭洲 2009-02-23
  • 打赏
  • 举报
回复
m | +n

+在这里就是个正号嘛,没有任何意义
cnyourdon 2009-02-23
  • 打赏
  • 举报
回复
看来 m|+n 与 m|n 还真是等价啊。
thesecretblue 2009-02-23
  • 打赏
  • 举报
回复
学习啦!!!
ForestDB 2009-02-23
  • 打赏
  • 举报
回复
+-除了可以当二元运算符(加减)以外,也可以当一元运算符,-还会用一下,+用得少。
然后两个数取|,就这样了。
thinkboy234 2009-02-23
  • 打赏
  • 举报
回复
m |+ n 等价于 m|(m+n)
ypb362148418 2009-02-23
  • 打赏
  • 举报
回复
按位异或的意思就是:比如:8,9(10进制),1000,1001(2进制)
1 0 0 0

1 0 0 1
^
----------
0 0 0 1 //异或的结果
liangkaiyu 2009-02-22
  • 打赏
  • 举报
回复
说明:最低位对齐
帖子发上去就成了这样,
我也没有办法
liangkaiyu 2009-02-22
  • 打赏
  • 举报
回复
1与0,0与1,1与1 或的结果是1
只有0与0 或的结果是0
按位或就可以了

10D = 1010B
20D = 10100B
按位或:  1010
      10100
--------
11110
11110B = 30D

就这么简单 
(在数字后加D表示十进制数,加B表示二进制)
  • 打赏
  • 举报
回复
m|+n and m|n and m+n是不是一样编译下先.
xmrforever 2009-02-22
  • 打赏
  • 举报
回复
我在VC++6.0环境下编译了一下

int main( void )
{
int n = 10;
int m = 20;
printf("%d\n", (m |+ n)); //1
printf("%d\n", (m | n)); //2
return 0;
}

1和2的结果都是30
cattycat 2009-02-22
  • 打赏
  • 举报
回复
看来 m|+n 与 m|n 还真是等价啊。
piginthetree 2009-02-22
  • 打赏
  • 举报
回复
a | b 和 a + b怎么会一样呢 1 和 3 相加为4, 1 和3相或还是等于3啊
fireseed 2009-02-22
  • 打赏
  • 举报
回复
我在VS2008里编译了如下代码:
#include <iostream>
void main( void )
{
int n = 5, m = 6;
std::cout << "m: " << m << ", n: " << n << std::endl;
std::cout << "m|+n: " << ( m |+ n ) << std::endl;
std::cout << "m+n: " << ( m + n ) << std::endl;
std::cout << "m|n: " << ( m | n ) << std::endl;
}


出现了下面的结果:
m: 6, n: 5
m|+n: 7
m+n: 11
m|n: 7
happytang 2009-02-22
  • 打赏
  • 举报
回复
可以看一下反汇编的代码就知道了
happytang 2009-02-22
  • 打赏
  • 举报
回复
编译器进行优化了
m|+n and m|n and m+n都是一样的
waizqfor 2009-02-22
  • 打赏
  • 举报
回复
[Quote=引用楼主 piginthetree 的帖子:]
C/C++ codeint main( void )
{
int n = 10;
int m = 20;
printf("%d\n", (m |+ n)); /* |+ ??? */

return 0;
}
[/Quote]
MS这个 (m |+ n) 等价与 (m | n) 啊
bitxinhai 2009-02-22
  • 打赏
  • 举报
回复
好像没有|+的定义吧
是不是应该为 |=

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧