我有兩個函數打印二進制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;
}
這兩個函數都以最高有效位從左到右輸出位。 –
您對平臺的[endianness](https://en.wikipedia.org/wiki/Endianness)做了一個假設。 –