C语言 hibyte =值>>8是什么意思?

vc9ivgsu  于 2023-02-15  发布在  其他
关注(0)|答案(4)|浏览(2247)

我正在使用C开发我的程序,我发现从一个示例代码

unHiByte = unVal >> 8;

这意味着什么?如果unVal = 250unHiByte的值是多少?

7xzttuei

7xzttuei1#

编程中的>>是一种按位运算,>>表示右移运算。
因此unVal >> 8意味着unVal右移8位,右移可以解释为除以2。
因此,unHiByte = unval >> 8等于unHiByte = unVal/(2^8)unVal除以2八次)

8xiog9wr

8xiog9wr2#

这里不讨论移位运算符本身(因为已经回答过了),这里假设unVal是一个两字节变量,有一个高字节(高8位)和一个低字节(低8位),目的是只获得高8位产生的值,而丢弃低8位。
移位运算符虽然应该很容易通过任何书籍/教程学习,也许是一些人投票反对这个问题的原因。

ubof19bj

ubof19bj3#

The >> is a bitwise right shift.
它是按位运算的。当unVal=250
Its binary form is 11111010
右移意味着把位向右移,所以当你把1111 1010,8位数向右移,你得到0000 0000

    • 注:**将>>左侧的数字除以2 ^(>>右侧的数字),可以很容易地确定右移操作结果

所以250/2 8 = 0

hyrbngr7

hyrbngr74#

例如:如果您有一个十六进制0x2A63,且您希望从中取出2A63,则可以执行此操作。
例如,如果我们将2A63转换为二进制,则为:0010101001100011(即16位,前8位为2A,后8位为63
问题是二进制总是从右边开始,所以我们必须把前8位(2A)推到右边才能得到它。

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.

就是这么简单。

相关问题