好吧,让我们考虑一个64位数字,其位形成一个8x8表.
例如
0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0
写作
a b c d e f g h
----------------
0 1 1 0 …Run Code Online (Sandbox Code Playgroud) 我有8个bool变量,我想将它们"合并"成一个字节.
有一个简单/首选的方法来做到这一点?
相反,如何将一个字节解码为8个独立的布尔值?
我认为这不是一个不合理的问题,但由于我无法通过谷歌找到相关文档,它可能是另一个"非你所有直觉都是错误的"案例.
我在C中寻找一种有效的算法来按位转换8字节的数据.我的意思是,如果我有8个这样的字节:
00011100
00111000
00000001
00000000
11000000
00000000
11111111
01010101
Run Code Online (Sandbox Code Playgroud)
我想获得以下8个字节:
00001010
00001011
01000010
11000011
11000010
10000011
00000010
00100011
Run Code Online (Sandbox Code Playgroud)
由于我想在嵌入式平台上使用它,它应该尽可能快:-)
所有的想法都非常感谢!
我一直在为这个问题绊绊(例如在这个问题中)。以原始整数类型数组(例如的数组)的形式给定2D位矩阵/板/数组long。为简单起见,我们可以假设一个方阵,例如,long在具有64位的平台上,由64个值组成的数组long。
让我们x[i]为0 <= i < 64是输入数组。计算数组y[i]以0 <= i <= 64使:
(x[i] >> j) & 1 == (y[j] >> i) & 1
Run Code Online (Sandbox Code Playgroud)
这x >> i是xby i位的按位右移,&是和,x[i]是iarray 中第th个位置的值x。
如何实现最有效地将数组映射x到数组的功能y?
我主要是在寻找非破坏性的方法,这些方法会使输入数组x保持完整。
使用的编程语言应具有整数类型的数组和按位运算。许多语言都满足这些要求。C / C ++和Java解决方案看起来非常相似,所以让我们选择这些语言。
c ×2
c++ ×2
performance ×2
64-bit ×1
arrays ×1
bit-packing ×1
bitboard ×1
boolean ×1
embedded ×1
java ×1