代码之家  ›  专栏  ›  技术社区  ›  klaus

删除无符号整数的2的补码[闭合]

c++
  •  -1
  • klaus  · 技术社区  · 7 年前

    我定义了以下uint:

    uint32_t a = ~(b - 1) & 0xf; // b is another uint32_t
    

    是否有可能:

    uint32_t a_bis = b & 0xf;
    

    假设我没有b但是有a,我想有a,但是我不知道我能做什么数学运算从a得到a。

    谢谢你的帮助!

    2 回复  |  直到 7 年前
        1
  •  1
  •   geza    7 年前

    解决办法是 a_bis = (~a+1)&0xf;

        2
  •  0
  •   Tic    7 年前

    如果您忘记了&0xf,这很容易理解。

    a = ~(b-1)
    a_bis = b
    

    你想要什么:

    ~a = (b - 1)
    ~a + 1 = b = a_bis
    so a_bis = ~a + 1
    

    a = ~(b - 1) & 0xf
    a_bis = b & 0xf
    

    编辑:没有看到geza的评论。