这个按位运算的目的是什么? (mWidth + 0x0000000F) & ~0x0000000F;
What is the purpose of this bitwise operation? (mWidth + 0x0000000F) & ~0x0000000F;
这是我感到困惑的代码行:
mMaskRowBytes = (mWidth + 0x0000000F) & ~0x0000000F;
~NOT
运算符对吗?
假设 mWidth
是 960,或 1111000000
所以我们得到的是
00000000000000000000001111001111
&
11111111111111111111111111110000
这只会导致
00000000000000000000001111000000
对吗?
目的是将十进制数转换成二进制数吗?
'~'是位补运算符。
对于正数mWidth
,它所做的只是向上舍入到下一个16的倍数。(因为960已经整除16,所以它保持不变)。
有更清晰的方法可以做到这一点,尽管具体取决于您的特定语言。
~运算符取补数:
例如:0110 将变为 1001
我不确定目的是什么 - 您需要展示如何使用 mMaskRowBytes。 但它看起来好像被用于处理 16 位(2 字节)块的东西,因此需要确保数据与最近的 2 字节地址对齐space。通常编译器会这样做以确保最有效的堆栈对齐。在 32 位系统上,这将是 4 字节和 64 位 4/8 字节。这意味着编译器可以自信地通过有效的步骤上下移动堆栈。对于现代 OS,编译器和 OS 都处理了这些问题。如果您处于系统级别,那么您可能必须自己完成所有这些工作。
这是我感到困惑的代码行:
mMaskRowBytes = (mWidth + 0x0000000F) & ~0x0000000F;
~NOT
运算符对吗?
假设 mWidth
是 960,或 1111000000
所以我们得到的是
00000000000000000000001111001111
&
11111111111111111111111111110000
这只会导致
00000000000000000000001111000000
对吗?
目的是将十进制数转换成二进制数吗?
'~'是位补运算符。
对于正数mWidth
,它所做的只是向上舍入到下一个16的倍数。(因为960已经整除16,所以它保持不变)。
有更清晰的方法可以做到这一点,尽管具体取决于您的特定语言。
~运算符取补数:
例如:0110 将变为 1001
我不确定目的是什么 - 您需要展示如何使用 mMaskRowBytes。 但它看起来好像被用于处理 16 位(2 字节)块的东西,因此需要确保数据与最近的 2 字节地址对齐space。通常编译器会这样做以确保最有效的堆栈对齐。在 32 位系统上,这将是 4 字节和 64 位 4/8 字节。这意味着编译器可以自信地通过有效的步骤上下移动堆栈。对于现代 OS,编译器和 OS 都处理了这些问题。如果您处于系统级别,那么您可能必须自己完成所有这些工作。