有没有好的算法合成一个比特组?

2015-10-16 09:39:53 +08:00
 zungmou
// 这个布尔类型的数组代表二进制 10011001
bool[] bits = new []{ true, false, false, true, true, false, false, true };

想讨论一下最高效的方法,将 bits 还原为一个 byte 。

我的办法是 for 循环八比特 true 唯一出现的位置,然后 or 叠加运算。

不知道各位有没有更好的方法?
2198 次点击
所在节点    程序员
10 条回复
Septembers
2015-10-16 09:48:10 +08:00
c742435
2015-10-16 09:57:59 +08:00
byte = bits[0] * 128 + bits[1] * 64.....
zhujinliang
2015-10-16 10:17:13 +08:00
_byte = 0;
for i = 0; i < 8; i++ {

_byte = _byte << 1 | bits[i];

}
weiceshi
2015-10-16 11:22:10 +08:00
int i = 0;
byte b = (byte)bits.Select(x=>(x?1:0)<<i++).Sum();
adexbn
2015-10-16 11:37:58 +08:00
那啥,打字时瞄了一眼,把标题看成了有没有好的算命方法,对不起
hitmanx
2015-10-16 11:39:09 +08:00
adfreedom
2015-10-16 16:04:24 +08:00
zealot0630
2015-10-16 19:31:41 +08:00
std::bitset
ryd994
2015-10-16 20:25:19 +08:00
试试用 union{
bool[8];
unsigned char;
}
zungmou
2015-10-19 13:39:44 +08:00
@ryd994 一个 bool 占一个字节的吧?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/228438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX