繁体   English   中英

在小端机上,位运算符将如何工作?

[英]On a little-endian machine, how will bit operators work?

我有以下代码从文件中获取像素值。 我在运行OS X的Intel Macbook上。我相信这是低端的。 我使用以下代码来确定是否在像素上设置了最低有效位。 它可以编译并运行,但是我不确定通过操作是否真的能给我正确的数据。

 typedef struct {
    unsigned char blue;
    unsigned char green;
    unsigned char red;
 } pixel_t;

 pixel_t *pixels = malloc(((bmp->dib.bmp_bytesz/3)+1) * sizeof(*pixels));

 printf("%u", (pixels[i].red & 0x01));
 printf("%u", (pixels[i].green & 0x01));
 printf("%u", (pixels[i].blue & 0x01));

小尾数法和大尾数法指的是以较大单位(例如shortint )为单位的字节顺序(本身不是位)。

按位运算是相同的; 这些操作为您提供了pixels[i].blue等数字的最低有效位。如果它们存储在char (或unsigned charsigned char )中,则没有问题。 如果将它们存储在intshort或某种形式中,则根据机器是big-endian还是little-endian而定,要寻址的字节将有所不同,但这仍然是平台上数字的最低有效位。

内在性是影响值存储方式的内部细节。 它对如何计算值没有影响。

乔纳森(Jonathan)已经有了正确的答案...只是添加一个例子。

字节序描述了多字节数据如何存储在计算机内存中。 它描述了内存中地址的最高有效字节(MSB)和最低有效字节(LSB)的位置。 大字节序:先存储MSB,即从左到右小字节序:先存储LSB,即从右到左。

示例:0x04030201如何存储在内存中?

Address     BE  LE
00000000    04  01
00000001    03  02
00000002    02  03
00000003    01  04

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM