我正在阅读数据表,它说图像的大小可以由此确定:
Image Length = len 0 + Len 1 * 100h + Len 2 * 10000h
然后在单片机上实现的代码是
L0 = Buffer[5];
L1 = Buffer[6];
L2 = Buffer[7];
image_size = L0 + (L1 << 8) + (L2 << 16);
我想知道是否有人可以解释这里发生了什么?你如何从一个转到另一个?如果相关的话,单片机是 32 位的。
最佳答案
100h
表示十六进制表示法中的 100,即十进制表示法中的 256。
一个数乘以 256 相当于将其二进制表示向左移动 8。
或者更一般地说:一个数乘以 2^n 相当于将其二进制表示向左移动 n。一个数除以 2^n 相当于将其二进制表示向右移动 n。
例子:
2 * 256 = 512
000000010 << 8 = 100000000 // << is the shift left operator
所以实际上是这样的:
image_size = L0 + (L1 << 8) + (L2 << 16);
可以写成:
image_size = L0 + (L1 * 0x100) + (L2 * 0x10000);
0x
前缀表示数字以十六进制表示而不是十进制表示,因此我们也可以这样写:
image_size = L0 + (L1 * 256) + (L2 * 65536);
关于c - 解释数据表中的十六进制并使用 C 按位左移运算符进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36083885/