注册 登录
编程论坛 C++教室

一道C++运算题,求解释

Undeadsprout 发布于 2007-09-07 16:40, 1691 次点击
 #include <iostream.h>
 void main()
 {
  int a=3,b=6;
  int c=a^b<<2;
  cout<<c<<endl;
 }
输出是:27
怎么得到的?
21 回复
#2
Undeadsprout2007-09-07 16:45
明白了!汗
<<优先级高于^
#3
cince2007-09-07 17:26

这个程序可以运行?
#4
天堂落日2007-09-07 17:31
当然可以了
VC++6.0编译通过
都是位运算
先移位运算,然后按位异或
#5
Undeadsprout2007-09-07 18:40
回复:(天堂落日)当然可以了VC++6.0编译通过都是位运...
dui!
#6
cince2007-09-07 22:48


但是我在Dev-C++中却无法编程通过。

加上:
using namespace std;
把void main()
改为int main()
后面再加上return 0;

才可以编译通过
#7
cince2007-09-07 22:49
是因为编译器不能而导致的吗?
#8
流川枫22007-09-09 10:51
以下是引用cince在2007-9-7 22:48:49的发言:


但是我在Dev-C++中却无法编程通过。

加上:
using namespace std;
把void main()
改为int main()
后面再加上return 0;

才可以编译通过
我不加using namespace std;才能编译啊。。。
加了就出错 error C2871: 'std' : does not exist or is not a namespace
为什么啊???
#9
sunkaidong2007-09-11 10:21

6的2进制是0110,左移2位是11000;3的2进制是0011;两数异或是11011=27

#10
xjlsgcjdtc2007-09-11 10:48
回复:(cince)是因为编译器不能而导致的吗?

对,vc 6.0要求main 没有返回值也能通过的

#11
ondy2007-09-11 20:15
  int a=3,b=6;
  int c=a^b<<2; // b<<2=3; 然后a的3次,你说等于几??
注意风格,如果不知道优先,可以用括号啊!!!强烈推荐用括号
#12
DG中专生2007-09-11 22:25
int c=a^b<<2;
这句什么意思?
能解释下吗?我初学不太懂
#13
snakeImao2007-09-11 22:41
#include <iostream.h>
void main()
{
int a=3,b=6,c;
c=a+(b<<2);
cout<<c<<endl;
}
结果一样也是 27 。
#14
guobingyu2007-09-12 18:22
sunkaidong 你太牛了
I 服了 You
#15
boris2502007-09-12 20:21
我也是初学者,“&lt;&lt;”表示什么意思呀,看各位大师的贴应该是个运算符!可是不知道具体他是怎么运算的。
#16
wangweicoin2007-09-12 23:04
回15楼:
"<<"是移位运算符,就是二进制的表示下,逻辑向左移位。b<<2表示向左移两位,而">>"表示向右移。
#17
wangweicoin2007-09-12 23:15

回8楼:
最初的C++库是在全局名字空间中定义的,而标准C++把整个库定义在自己的名字空间中,那个空间的名称为std,#include<iosteam.h>(老式的头文件)把文件的内容放入全局名字空间,include<iosteam>(新式的头文件)则是把文件内容放入std中,所以需要调用using namespace std语句。像楼主用的#include<iosteam.h>
不用加上using namespace std;

#18
何苦而乐2007-09-13 00:09

拷下来编译后提示如下错误是怎么回事啊?
--------------------Configuration: guaiquti - Win32 Debug--------------------
Compiling...
guaiquti.cpp
E:\c++程序设计\guaiquti.cpp(2) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(2) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(3) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(3) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(4) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(4) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(4) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(4) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(5) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(5) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(5) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(5) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(6) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(6) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(6) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(6) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(7) : error C2018: unknown character '0xa1'
E:\c++程序设计\guaiquti.cpp(7) : error C2018: unknown character '0xa1'
执行 cl.exe 时出错.

guaiquti.obj - 1 error(s), 0 warning(s)

#19
boris2502007-09-13 20:36
回复:(wangweicoin)回15楼:

首先感谢16楼的回答,可是还是有点不懂,你所说的逻辑移位是不是指相应的数字向前或向后移动几位呀,比如6的二进字数为00000110,6<<2表示00000110中每个数字相应向左移两位是00011000,6>>3表示00000110各数向右移三位则为:00000000.
还有点不懂的是“^”表示什么意思,前面有提到是异或运算,到底是如何计算。
多谢,我也是刚开始学C++,所以问题特多,谢谢!!!

[此贴子已经被作者于2007-9-13 20:43:36编辑过]

#20
wangweicoin2007-09-14 19:13

你对移位理解的对,至于异或你可能没学过汇编吧,打个比方吧:3^6=5
3= 0000 0011
6= 0000 0110
------------------
5= 0000 0101
就是说,把两个数的二进制对位进行比较,相同就是0,不同就是1,就是这么简单!

#21
boris2502007-09-16 19:36
回复:(wangweicoin)你对移位理解的对,至于异或你可...

我是业余电脑爱好者,呵呵……
非常感谢!!!!

#22
DG中专生2007-10-31 19:37
以下是引用cince在2007-9-7 22:48:49的发言:


但是我在Dev-C++中却无法编程通过。

加上:
using namespace std;
把void main()
改为int main()
后面再加上return 0;

才可以编译通过

有关说明,c/c++误区void main上说的很清楚

1