如何交换无符号整数的两个八位二进制表示的位置?

How to swap places of a two eight-bit binary representations of an unsigned integer?

#include<stdio.h>
#include<stdlib.h>

void displayEightBits( unsigned int value );//prototype


int main(void){

 unsigned int x;

  printf( "%s", "Enter a nonnegative int: " );
  scanf( "%u", &x );
 displayEightBits( x );
}


void displayEightBits( unsigned int value )
{

 unsigned int c;

 unsigned int displayMask = 1 << 31;

 printf( "%10u = ", value );

 for ( c = 1; c <= 32; ++c ) {

   putchar( value & displayMask ? '1' : '0' );
   value <<= 1;

   if (c % 8 == 0 ){
    putchar( ' ' );
    }

   }

  putchar( '\n' );

 }

你好,这个程序提示用户输入一个非负数,然后 returns 输入数字的两个八位二进制表示。我想知道如何交换位置交换位置。 (即将左字节向右移动,从右向左移动)。

如何交换一个无符号整数的两个八位二进制表示的位置?

所以,如果我正确理解了问题,你有:

00000000 00001111 11110000 11111111

你想要:

11111111 11110000 00001111 00000000

你需要有四个 for 循环,其中一个循环从 7 到 0,第二个循环从 15 到 8,第三个循环从 23 到 16,第四个循环从 31 到24.那么如果循环变量是idx,你就做

putchar( value & (1<<idx) ? '1' : '0' );

那就干

putchar(' ');

在循环之间保持字节由 space 分隔。

我不会为您编写完整的代码,但根据这些说明,您应该能够制作一个工作程序。

编辑:好的,如果我的回答不清楚,我就写了代码。我希望这段代码能让我的回答更清楚:

unsigned value = 0x12345678U;
int idx;
for (idx = 7; idx >= 0; idx--)
    putchar(value & (1<<idx) ? '1' : '0');
putchar(' ');
for (idx = 15; idx >= 8; idx--)
    putchar(value & (1<<idx) ? '1' : '0');
putchar(' ');
for (idx = 23; idx >= 16; idx--)
    putchar(value & (1<<idx) ? '1' : '0');
putchar(' ');
for (idx = 31; idx >= 24; idx--)
    putchar(value & (1<<idx) ? '1' : '0');
putchar('\n');

您可以使用数组并将最后一个数字作为数组中的第一个