这种按位运算的目的是什么? (mWidth + 0x0000000F)& 〜0x0000000F;

时间:2016-10-03 14:46:59

标签: bit-manipulation bitwise-operators

以下是我感到困惑的代码行:

 mMaskRowBytes = (mWidth + 0x0000000F) & ~0x0000000F;

〜是NOT运算符吗?

我们说mWidth是960,或1111000000

所以我们得到的是

00000000000000000000001111001111 
&
11111111111111111111111111110000

只会导致

00000000000000000000001111000000

右?

目的是将十进制数转换为二进制数吗?

2 个答案:

答案 0 :(得分:2)

'〜'是按位互补运算符。

对于正mWidth,它所做的只是向上舍入到下一个16的倍数。(由于960已经除以16,它保持不变)。

有更明确的方法可以做到这一点,虽然具体细节将取决于您的特定语言。

答案 1 :(得分:1)

〜运算符采用补码:

所以例如:0110将变为1001

目的是什么我不确定 - 您需要显示mMaskRowBytes的使用方式。 但它看起来好像用于处理16位(2字节)块的内容,因此需要确保数据与最近的2字节地址空间对齐。编译器通常会这样做以确保最有效的堆栈对齐。在32位系统上,这将是4字节和64位4/8字节。这意味着编译器可以自信地通过有效步骤上下移动堆栈。对于现代操作系统,这一切都由编译器和操作系统处理。如果你在系统级别下降,那么你可能必须自己完成这一切。