如何交换无符号整数的两个八位二进制表示的位置?
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');
您可以使用数组并将最后一个数字作为数组中的第一个
#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');
您可以使用数组并将最后一个数字作为数组中的第一个