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

时间:2015-03-19 21:01:49

标签: c binary bit

#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' );

 }

您好,此程序会提示用户输入非负数,然后返回输入数字的两个八位二进制表示形式。我想知道如何交换地点交换他们的地方。 (即将左侧字节向右移动,从右向左移动)。

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

2 个答案:

答案 0 :(得分:0)

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

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(' ');
循环之间的

以字节分隔空格。

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

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

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');

答案 1 :(得分:0)

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