下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
下面的位运算符在现实世界中有哪些用例?
和 XOR 不 或 左/右转
当前回答
似乎没有人提到定点数学。
(是的,我老了,好吗?)
其他回答
奇怪吗?
(value & 0x1) > 0
它能被2(偶数)整除吗?
(value & 0x1) == 0
它们主要用于位操作(惊喜)。下面是在PHP代码库中找到的一些实际示例。
字符编码:
if (s <= 0 && (c & ~MBFL_WCSPLANE_MASK) == MBFL_WCSPLANE_KOI8R) {
数据结构:
ar_flags = other->ar_flags & ~SPL_ARRAY_INT_MASK;
数据库驱动程序:
dbh->transaction_flags &= ~(PDO_TRANS_ACCESS_MODE^PDO_TRANS_READONLY);
编译器实现:
opline->extended_value = (opline->extended_value & ~ZEND_FETCH_CLASS_MASK) | ZEND_FETCH_CLASS_INTERFACE;
一个常见的用法是对齐,例如我需要我的数据在4字节或16字节的边界上对齐。这在RISC处理器中非常常见,其中未对齐的加载/存储要么代价高昂(因为它触发了一个异常处理程序,然后需要修复未对齐的加载),要么根本不允许。
对于任何以2为幂的对齐,下一个对齐的pos可以计算如下:
aligned_offset = alignment + ((current_offset - 1) & ~(alignment - 1))
所以在4字节对齐和当前偏移量为9的情况下:
aligned_offset = 4 + ((9-1) & ~(4-1)) = 4 + (8 & 0xFFFFFFFC) = 4+ 8 = 12
所以下一个4字节的对齐偏移量是12
加密都是按位操作。
这是一个从字节格式的位图图像中读取颜色的例子
byte imagePixel = 0xCCDDEE; /* Image in RRGGBB format R=Red, G=Green, B=Blue */
//To only have red
byte redColour = imagePixel & 0xFF0000; /*Bitmasking with AND operator */
//Now, we only want red colour
redColour = (redColour >> 24) & 0xFF; /* This now returns a red colour between 0x00 and 0xFF.
我希望这个小例子可以帮助....