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

这个式子应该怎么读,我不会

blueness21 发布于 2007-08-03 18:49, 1169 次点击


a=2*k!=!m

我不会读,会读的帮帮哦,先谢谢了~

16 回复
#2
antter2007-08-03 18:52
不用读了,把出书的或给你出题的砸了。

2*k不等于非m的值赋给a
#3
blueness212007-08-03 18:58
以下是引用antter在2007-8-3 18:52:03的发言:
不用读了,把出书的或给你出题的砸了。

2*k不等于非m的值赋给a

2*k不等于非m的值赋给a...我知道读出来是这个效果,我想知道应该怎么理解,谢谢。

#4
cfd2007-08-03 20:09

(a=(2*k))!=(!m);

加上括号应该能看明白了,实际编程中用不上这些吧.

#5
medicihophy2007-08-03 20:15
呵呵,本来不准备啰唆的,但楼上似乎在误导人啊(不是恶意的哈,别介意):
正确的括号顺序是这样的:
a=((2*k)!=(!m));
#6
medicihophy2007-08-03 20:25
mov DWORD PTR k, 2//首先给k赋值
mov DWORD PTR m, 5//给m赋值
mov eax, DWORD PTR k//这和下面一行实现左移1位,即*2,
shl eax, 1
xor ecx, ecx
cmp DWORD PTR m, 0//m和0比较,结果放在cl中,即ecx寄存器中,即实现!m
sete cl
xor edx, edx
cmp eax, ecx//2*k的值和!m值比较,结果放在dl中,即放在了edx寄存器中
setne dl
mov DWORD PTR a, edx//将edx中的值,即2*k与!m比较的结果,赋值给a

所以说应该是a=((2*k)!=(!m));
#7
multiple19022007-08-03 20:58
楼上的……强
#8
mayuebo2007-08-03 21:03
楼上强。5楼正确
#9
blueness212007-08-03 21:44

原来涉及个优先级问题。..我还很不熟练。
不过谢谢5楼的强人.真的好强,那些好似汇编的东西我看了就头疼。

#10
aipb20072007-08-03 23:16

汇编是个好东西啊,赞个。

#11
blueness212007-08-04 11:43
至今仍是个噩梦。。。
我问了些朋友,汇编并不是学软件的人必须要掌握的东西,对吧?
#12
圆圆的鸟蛋2007-08-04 12:10
对!!但是想进一步了解底层和C++本身,学学 汇编有好处,至少可以帮助我们理解指针。。
#13
cfd2007-08-04 13:53
以下是引用medicihophy在2007-8-3 20:15:37的发言:
呵呵,本来不准备啰唆的,但楼上似乎在误导人啊(不是恶意的哈,别介意):
正确的括号顺序是这样的:
a=((2*k)!=(!m));
学习了...

确实有些优先级弄不清,抱歉.
#14
xieyuanchang2007-08-07 03:24
以下是引用medicihophy在2007-8-3 20:25:22的发言:
mov DWORD PTR k, 2//首先给k赋值
mov DWORD PTR m, 5//给m赋值
mov eax, DWORD PTR k//这和下面一行实现左移1位,即*2,
shl eax, 1
xor ecx, ecx
cmp DWORD PTR m, 0//m和0比较,结果放在cl中,即ecx寄存器中,即实现!m
sete cl
xor edx, edx
cmp eax, ecx//2*k的值和!m值比较,结果放在dl中,即放在了edx寄存器中
setne dl
mov DWORD PTR a, edx//将edx中的值,即2*k与!m比较的结果,赋值给a

所以说应该是a=((2*k)!=(!m));

5楼的这位能不能帮我解释下
例如 mov DWORD PTR k, 2
mov 是指令 DWORD 是类型 PTR是什么? 2又代表什么?

#15
lijy5202007-08-08 21:42
同意5楼
不用汇编也看的懂的
看看你C书上的优先级附表
偶学电气自动化的学了汇编
#16
lijy5202007-08-08 21:43
51系列单片机
#17
Hevin1232007-08-22 23:32
当初没学汇编,真是太遗憾了
1