2010-11-26 186 views
3

我在我的书中有这样的问题,我已经做了检查我的自我,但我不知道正确的答案,没有任何解释。c语言的逻辑运算符misunderestanding

它有两个部分 “A” 和 “B”

a) A = B & C[0] 
b) A = A ? B : C[0] 

C[0] = 0x000
A = 0x00000000 
B = 0x00002222 

它想从我这

1)what is the result of A 
2) the MIPS instruction for each part 
3)show the bit level representation of each in structure. 

感谢

+0

的 '&' 是按位和,而不是一个逻辑运算符。 B和C的起始值是什么? (他们是0x1234和0x2222?)你可以从中找出答... – Starkey 2010-11-26 13:43:37

回答

3

&是位与。输出的每一位为1,如果两个对应的输入位是1:

0x000= .... 0001 0010 0011 0100 
0x00002222 = .... 0010 0010 0010 0010 

AND result = .... 0000 0010 0010 0000 = 0x00000220 

我不知道MIPS但是指令可能只是叫and

?是三元运算符:您的示例意思是“如果A是真布尔表达式,则返回B否则返回C [0]”。通常在C中假为零且真正为非零(如果这是标准化的,我不是100%确定的 - 我认为它不在早期的标准中,但它是常用的)所以

  • 如果A = 0x0000 then(bool)A == false,结果是C [0]。
  • 如果A = 0x0220(结转从部分结果的),然后(布尔)A == true且结果是B.
2

&在C.逐位与运算 例如。 0001 = 0000

?是写作的另一种方式if

A = A ? B : C[0] 

说,A获得的值=(如果A为真则B ELSE C [0])

转换为十六进制到二进制,并做练习。

编辑:澄清:由“和” - >“位与”

+0

第一个问题,我必须将结果转换为十六进制或不是? – user472221 2010-11-26 13:46:38

+0

你应该如果你想执行按位与。 – Muggen 2010-11-26 13:47:30

1

的MIPS:

一个)A = B &Ç [0]

$ T1 = C

$ T2 = B

$ T3 =甲

LW $ t0时,0($ T1);移动Ç到临时REG

和$ T3,$ T0,T2 $;执行逐位和

B)A = A?B:C [0]

$ T1 = C

$ T2 = B

$ T3 =甲

BEQ $ 0,$ T3,3;如果A是0去3行向下

加$ T3,$ 0,$ T2;移动B到A

Ĵ端;后藤结束

LW $ t0时,0($ T1);螺广告C到一个临时REG

加$ T3,$ 0 $ T0;招温度值转换成

末: