c按位运算以匹配描述

斯科蒂鲍比

我应该将文字说明与按位运算匹配。W比a和b的数据结构中的总位数小1。因此,如果a为32位长,则W为31,这是文字说明:

1. One’s complement of a
2. a.
3. a&b.
4. a * 7.
5. a / 4 .
6. (a<0)?1:-1.

这是按位描述:

a.  ̃( ̃a | (b ˆ (MIN_INT + MAX_INT)))
b. ((aˆb)& ̃b)|( ̃(aˆb)&b)
c. 1+(a<<3)+ ̃a
d. (a<<4)+(a<<2)+(a<<1)
e. ((a<0)?(a+3):a)>>2
f. a ˆ (MIN_INT + MAX_INT)
g.  ̃((a|( ̃a+1))>>W)&1
h.  ̃((a >> W) << 1)
i. a >> 2

我解决了其中的一些问题:

a.  ̃( ̃a | (b ˆ (MIN_INT + MAX_INT))) = a & b
b. ((aˆb)& ̃b)|( ̃(aˆb)&b) = a
c. 1+(a<<3)+ ̃a = 7 * a
d. (a<<4)+(a<<2)+(a<<1) = 16*a + 4*a + 2*a = 22*a
e. e. ((a<0)?(a+3):a)>>2 = (a<0)?(a/4 + 3/4) : a/4 = a/4 + ((a<0)?(3/4:0)
f. a ˆ (MIN_INT + MAX_INT) = ~a
i. a >> 2 = a/4

所以基本上我需要帮助的是g和h

g.  ̃((a|( ̃a+1))>>W)&1
h.  ̃((a >> W) << 1)

如果您不介意的话,还可以提供一个解释吗?

我认为这就是g的情况:

g.  ̃((a|( ̃a+1))>>W)&1 = ~((a|(two's complement of a) >>W)&1 
= ~((a|sign of two's complement of a) &1 = ~(-a)&1

但这可能是1或0,所以我认为我做错了。

为此:

h.  ̃((a >> W) << 1) = ~((sign of a) << 1) = ~((sign of a)*2) 

而且我不知道从那里去哪里...

谢谢您的帮助!!!

sch

对于g,考虑(a |〜a)将所有位设置为1,因此:

〜(((a |
〜a )>> W)&1〜(all_ones >> W)&1〜1
&1
0

加1~a可能会影响此结果的唯一方法是加法器翻转了最高有效位~a(由于W右移)。只有在a0或2 ^ W时才可能发生在后一种情况下,我们将得到与上述相同的结果,因为(a | X)的最高位将始终被设置。但是,当a为0 ~a+1(0的二进制补码)时也为0,则整个表达式的最终结果将为1。

因此,当ga为零时g为1 ,否则为0(即-g等效于C表达式a == 0)。这似乎与您的任何措辞描述都不符。确实,我看不到任何表达式(X&1)可能与您的任何措词描述相匹配。您的措辞描述中没有一个匹配的表达式的结果仅为0或1(对于a,b的所有值)。

对于h,请考虑是否a为负,则设置其最高位。由于a是带符号的,因此将其右移31位会在的所有32位上拖动符号位a然后向左移动一个位置将最低有效位设置为0。补码产生1。如果a为非负数,则其最高位为0,向右移动31个位置产生0。向左移动1位置仍产生0。补码产生所有设置的位,它是-1的2的补码rep。因此,h等于您的文字描述中的(a <0?1:-1)或​​#6。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章