uint16_t hex = 0x2A63;
uint8_t part2A = (uint8_t)(hex >> 8) // Pushed the first
// eight bits (2A) to right and (63) is gone out of the way. Now we have 0000000000101010
// Now Line 2 returns for us 0x2A which the last 8 bits (2A).
// To get 63 we will do simply:
uint8_t part63 = (uint8_t)hex; // As by default the 63 is on the right most side in the binary.
4条答案
按热度按时间7xzttuei1#
编程中的
>>
是一种按位运算,>>
表示右移运算。因此
unVal >> 8
意味着unVal
右移8位,右移可以解释为除以2。因此,
unHiByte = unval >> 8
等于unHiByte = unVal/(2^8)
(unVal
除以2八次)8xiog9wr2#
这里不讨论移位运算符本身(因为已经回答过了),这里假设unVal是一个两字节变量,有一个高字节(高8位)和一个低字节(低8位),目的是只获得高8位产生的值,而丢弃低8位。
移位运算符虽然应该很容易通过任何书籍/教程学习,也许是一些人投票反对这个问题的原因。
ubof19bj3#
The
>>
is a bitwise right shift.它是按位运算的。当
unVal=250
。Its binary form is
11111010
右移意味着把位向右移,所以当你把
1111 1010
,8位数向右移,你得到0000 0000
。>>
左侧的数字除以2 ^(>>
右侧的数字),可以很容易地确定右移操作结果所以
250/2
8= 0
hyrbngr74#
例如:如果您有一个十六进制
0x2A63
,且您希望从中取出2A
或63
,则可以执行此操作。例如,如果我们将
2A63
转换为二进制,则为:0010101001100011
(即16位,前8位为2A
,后8位为63
)问题是二进制总是从右边开始,所以我们必须把前8位(
2A
)推到右边才能得到它。就是这么简单。