gpt4 book ai didi

c++ - 为什么这两个打印整数二进制表示的函数具有相同的输出?

转载 作者:太空狗 更新时间:2023-10-29 20:22:28 24 4
gpt4 key购买 nike

我有两个函数以二进制形式打印 32 位数字。第一个将数字分成字节并从最后一个字节开始打印(从整个整数的第 25 位开始)。第二个更直接,从数字的第一位开始。在我看来,这些函数应该有不同的输出,因为它们以不同的顺序处理位。但是输出是相同的。为什么?

#include <stdio.h>

void printBits(size_t const size, void const * const ptr)
{
unsigned char *b = (unsigned char*) ptr;
unsigned char byte;

int i, j;

for (i=size-1;i>=0;i--)
{
for (j=7;j>=0;j--)
{

byte = (b[i] >> j) & 1;
printf("%u", byte);
}
}
puts("");
}

void printBits_2( unsigned *A) {

for (int i=31;i>=0;i--)
{
printf("%u", (A[0] >> i ) & 1u );
}
puts("");
}

int main()
{
unsigned a = 1014750;
printBits(sizeof(a), &a); // ->00000000000011110111101111011110
printBits_2(&a); // ->00000000000011110111101111011110
return 0;
}

最佳答案

您的两个函数都打印从最高有效位到最低有效位的数字的二进制表示。今天的 PC(以及大多数其他计算机架构)使用所谓的 Little Endian格式,其中多字节值以最低有效字节在前存储。

这意味着存储在地址 0x1000 上的 32 位值 0x01020304 在内存中将如下所示:

+--------++--------+--------+--------+--------+
|Address || 0x1000 | 0x1001 | 0x1002 | 0x1003 |
+--------++--------+--------+--------+--------+
|Data || 0x04 | 0x03 | 0x02 | 0x01 |
+--------++--------+--------+--------+--------+

因此,在 Little Endian 体系结构上,将值的位从 MSB 打印到 LSB 相当于以相反的顺序获取其字节并将每个字节的位从 MSB 打印到 LSB。

关于c++ - 为什么这两个打印整数二进制表示的函数具有相同的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37764777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com