我正在学习位打包和位缓冲区,并且遇到了这行代码
int NumBits = sizeof(float) << 3
Run Code Online (Sandbox Code Playgroud)
现在输出是正确的,浮点数是 4 个字节,当你将其转换为位时,它是 32 位,这是NumBits
我的问题是向左移位 3 位如何给出正确的值?
他们也可以用相反的方式做到这一点,将实际值NumBits向右移动 3
int numbytes = NumBits >> 3;
Run Code Online (Sandbox Code Playgroud)
sizeof(float) 返回浮点数的大小(以字节为单位)。在大多数系统(例如PC)中,一个float为4个字节,因此sizeof(float)等于4。
<< 运算符是左移运算符。当您将某个值左移一定数量的位数时,实际上是将该值乘以 2 的移位位数次方。在本例中,左移 3 位,因此相当于乘以 2^3,即 8。
因此,sizeof(float) << 3 相当于 4 << 3,等于 32。
总之,左移 3 与乘以 8 相同,得到位数。同样,右移 3 与除以 8 相同。