【发布时间】:2018-03-11 13:39:51
【问题描述】:
在输入时,我得到了多个 uint32_t 数字,它们实际上是长度为 32 的二进制字符串。我想生成二进制字符串(又名另一个 uint32_t 数字),其中第 n 位设置为 1 如果输入的每个给定字符串中的第 n 位是相同的。
这是 4 位字符串的简单示例(只是相同问题的更简单实例):
输入:0011, 0101, 0110
输出:1000
因为:输入的每个字符串的第一位都相同,因此输出中的第一位将设置为1,第二、第三和第四位将设置为0,因为它们有不同的值。
从给定输入产生输出的最佳方法是什么?我知道我需要使用按位运算符,但我不知道它们中的哪一个以及按什么顺序。
uint32_t getResult( const vector< uint32_t > & data ){
//todo
}
【问题讨论】:
-
请记住,二进制数在写入时与其他任何数字一样,第一个数字是最右边的位。所以在你的例子中, last 数字(和最后一位)是一样的。
-
@Christophe 到目前为止,我只是想了解按位运算符,并在纸上勾勒出一些想法。我正在考虑使用
^XOR 运算符并以某种方式将它与 C++ 中的 for-each 构造一起使用,但我不知道如何进行 -
@Someprogrammerdude 我有点迷失在这个 LSB 和 MSB 的东西上。写下 32 位数字时,LSB 在右边,MSB 在左边,我知道。我原来的帖子有点混乱,我明白
-
@Someprogrammerdude 我怀疑它会起作用。相反……好吧,我不会给 OP 太多提示。
-
@Someprogrammerdude 0011 ^ 0101 是 0110 然后 0110 ^ 0110 是 0000。也许引入一个不看事物相似之处和不同之处。但也许您需要处理的不仅仅是一个累积变量
标签: c++ bit-manipulation bitwise-operators uint32