我在书中读过这句话:
逻辑和移位指令分别对位进行操作 算术,对整个单词
用于隔离字段。通过遮罩或来回移动。
我根本听不懂这两个句子。
移位和算术指令都会改变所有位(在某些情况下),而在算术中,位将被逐位相加以计算答案。
那么这部分是什么意思“指令分别对位进行操作,不同于算术,它对整个单词进行操作” ?
我的第二个问题:
我不知道这部分内容,您可以向我解释一下吗?
用于隔离字段。通过遮罩或来回移动。
我的第三个问题:什么是逻辑指令。他是说AND,还是OR?你能解释更多吗?
答案 0 :(得分:6)
逻辑和Shift 操作通常被称为按位运算,并且分别对位进行操作,这意味着每个输出位仅依赖于单个固定位的一个或多个位。输入中,您可以立即计算该位,而无需依赖任何其他位或先前的计算结果
例如,在AND,OR,XOR,NOT ... output[n]
(即输出中的位n)由input1[n]
和input2[n]
计算得出。类似地,向左移动N仅从output[i]
产生input[i - N]
。我正在从here拍摄示例图片,以便于理解
OTOH加法结果中的每一位取决于进位,您必须等待之前的加法操作完成,例如S n = A n + B n + C n
可以使用carry-lookahead adder中的一些逻辑通过预先计算进位来进行更快的加法运算,但是与没有依赖项的按位运算相比,它仍然较慢并且需要更多的裸片面积。同样,通过单独获取每个输出位也无法完成其他算术运算。
这是您的第一个和第三个问题。关于第二个
用于通过屏蔽或来回移动来隔离字段。
表示它们通常用来通过用AND进行屏蔽来获得bit fields(即,仅使该字段中的位落入,通过过滤掉掩码为零的位置中的位)或移到零来获取What are bitwise shift (bit-shift) operators and how do they work?这些位并移回其原始位置
进一步阅读:
答案 1 :(得分:1)
逻辑指令是and或xor,但我都不明白第一句话。
关于第二个,假设您对单词中的一部分感兴趣,比如说6..4位,然后您就想提取该信息。有两种方法可以做到这一点。
1 /使用遮罩和移位。您在自己感兴趣的字段上设置了一个掩码,并在其他位置将其设置为零,然后对该掩码应用与。
unsigned original ; // initial data is yyy...yyyxxxyyyy
// where the interesting part is coded by xxx
unsigned field ; // we want to have field=00..0xxx
unsigned mask = 0x70 ; // 0...01110000 ones on the interesting part
field = original & mask ; // field=0...00xxx0000
field >>= 4 ; // field=00...00xxx
2 /仅使用班次
unsigned original, field ; // initial data and interesting field
field = original << 25 ; // put interesting bits in the msb of field
// field=xxxyyyy00..00
field >>= 29 ; // get rid of the 4 LSB -> field=00...00xxx
如果要修改这些位而不是提取它们,则可以使用类似的方法。