对c语言逻辑运算符的误解

时间:2010-11-26 13:37:10

标签: c mips

我在书中有这样的问题,我是为了检查自己而做的,但我不知道正确答案,也没有任何解释。

它有两个部分“a”和“b”

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

C[0]  = 0x00001234
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.

感谢

3 个答案:

答案 0 :(得分:3)

&是一个有点明智的AND。如果两个相应的输入位都是1:

,则输出的每个位都为1
0x00001234 = .... 0001 0010 0011 0100
0x00002222 = .... 0010 0010 0010 0010

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

我不知道MIPS,但该指令可能只是被称为and

?是三元运算符:您的示例意味着“如果A是真正的布尔表达式,则返回B,否则返回C [0]”。一般来说,C false是零而真正的非零(我不是100%肯定,如果这是标准化的 - 我不认为它是在早期的标准,但它是常见的用途)所以

  • 如果A = 0x0000则(bool)A == false,结果为C [0]。
  • 如果A = 0x0220(结转部分a的结果)则(bool)A == true,结果为B.

答案 1 :(得分:2)

&是C中的逐位AND运算符。 例如。 0000& 0001 = 0000

?是撰写if

的另一种方式
A = A ? B : C[0]

表示A得到值=(如果A为真,那么B ELSE C [0])

将Hex转换为二进制并进行练习。

编辑:澄清:将“AND”设为 - > “按位和”

答案 2 :(得分:1)

mips:

a)A = B& C [0]

$ t1 = C

$ t2 = B

$ t3 = A

lw $ t0,0($ t1);将c移至temp reg

和$ t3,$ t0,$ t2;按位执行和

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

$ t1 = C

$ t2 = B

$ t3 = A

beq $ 0,$ t3,3;如果A为0,则下移3行

添加$ t3,$ 0,$ t2;将B移至A

j end;转到结尾

lw $ t0,0($ t1);将c加载到临时寄存器

添加$ t3,$ 0,$ t0;将临时值移入

端: