我在理解如何降低char变量的n位时遇到了一些问题使用value〈〈4来执行它是否正确?value | 0x0F或value & 0xF0
value | 0x0F
value & 0xF0
jyztefdp1#
假设你在某处定义了一个char value;:因为你想将value的4个低位设置为零,你需要将AND的这些位设置为零,同时保持其他位不变(1 & 1 == 1,0 & 1 == 0):
char value;
value
AND
1 & 1 == 1
0 & 1 == 0
value = value & 0xF0;
或更短
value &= 0xF0;
视觉帮助:
+--------------+------------------+ | value | a b c d _ _ _ _ | | 0xF0 | 1 1 1 1 0 0 0 0 | | ------------ | ---------------- | | value & 0xF0 | a b c d 0 0 0 0 | +--------------+------------------+
4ngedf3f2#
假设value是一个8位char:value | 0x0F返回一个新值,保留高4位,低4位设置为1。
char
xxxxyyyy OR 00001111 -------- xxxx1111
value & 0xF0返回一个新值,保留高4位,低4位设置为0。
xxxxyyyy AND 11110000 -------- xxxx0000
value << 4返回一个新的值,其中所有的位都向左移动了4位,因此旧的高4位被丢弃,旧的低4位现在是新的高4位,而新的低4位是0。
value << 4
xxxxyyyy LSH 4 -------- yyyy0000
2条答案
按热度按时间jyztefdp1#
假设你在某处定义了一个
char value;
:因为你想将
value
的4个低位设置为零,你需要将AND
的这些位设置为零,同时保持其他位不变(1 & 1 == 1
,0 & 1 == 0
):或更短
视觉帮助:
4ngedf3f2#
假设
value
是一个8位char
:value | 0x0F
返回一个新值,保留高4位,低4位设置为1。value & 0xF0
返回一个新值,保留高4位,低4位设置为0。value << 4
返回一个新的值,其中所有的位都向左移动了4位,因此旧的高4位被丢弃,旧的低4位现在是新的高4位,而新的低4位是0。