V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zungmou
V2EX  ›  程序员

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

  •  
  •   zungmou · 2015-10-16 09:39:53 +08:00 · 2184 次点击
    这是一个创建于 3120 天前的主题,其中的信息可能已经有所发展或是发生改变。
    // 这个布尔类型的数组代表二进制 10011001
    bool[] bits = new []{ true, false, false, true, true, false, false, true };

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

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

    不知道各位有没有更好的方法?
    10 条回复    2015-10-19 13:39:44 +08:00
    Septembers
        1
    Septembers  
       2015-10-16 09:48:10 +08:00 via Android
    c742435
        2
    c742435  
       2015-10-16 09:57:59 +08:00
    byte = bits[0] * 128 + bits[1] * 64.....
    zhujinliang
        3
    zhujinliang  
       2015-10-16 10:17:13 +08:00
    _byte = 0;
    for i = 0; i < 8; i++ {

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

    }
    weiceshi
        4
    weiceshi  
       2015-10-16 11:22:10 +08:00
    int i = 0;
    byte b = (byte)bits.Select(x=>(x?1:0)<<i++).Sum();
    adexbn
        5
    adexbn  
       2015-10-16 11:37:58 +08:00
    那啥,打字时瞄了一眼,把标题看成了有没有好的算命方法,对不起
    hitmanx
        6
    hitmanx  
       2015-10-16 11:39:09 +08:00
    adfreedom
        7
    adfreedom  
       2015-10-16 16:04:24 +08:00
    zealot0630
        8
    zealot0630  
       2015-10-16 19:31:41 +08:00
    std::bitset
    ryd994
        9
    ryd994  
       2015-10-16 20:25:19 +08:00 via Android
    试试用 union{
    bool[8];
    unsigned char;
    }
    zungmou
        10
    zungmou  
    OP
       2015-10-19 13:39:44 +08:00   ❤️ 1
    @ryd994 一个 bool 占一个字节的吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2260 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:56 · PVG 15:56 · LAX 00:56 · JFK 03:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.