请教下为什么输出二进制的字符串的高位0会消失;

//实现无符号循环右移;
#include <stdio.h>
unsigned int rotate_right(unsigned int x,int num);
int main(void)
{
unsigned int x;
unsigned int num;
char string[40];
printf("输入操作数和右移次数:");
while(scanf("%d%d",&x,&num)==2)
{
printf("\n数 %u 右移 %u 位的结果是: ",x,num);
x=rotate_right(x,num);
itoa(x,string,2);
printf("%s\n",string);
printf("输入操作数和右移次数:");
}
return 0;
}
unsigned int rotate_right(unsigned int x,int num)

int i;
for(i=0;i<num;i++)
{
if((x&1)==1)
{
x=x>>1;
x=x|(1<<31);
}
else
{
x=x>>1;
x=x&(~(1<<31));
}
}
return x;
}

RISEBY
浏览 128回答 2
2回答

largeQ

#include <string>#include <iostream>using namespace std;string foo(int n){string str;for(unsigned i=0; i<32; ++i){str.insert(str.begin(),'0'+(n&1));n >>= 1;}return str;}void main(void){cout<<foo(567)<<endl;}

LEATH

1.在这里,return 0;的作用仅仅是表示mian()函数运行结束。作用是不执行后面的的system("pause"); 语句.2.函数itoa求出的只是该二进制数对应的“字符串”是char类型,不是int类型的数据。这里只是看个结果,所以,用字符串足已。请看:printf("%s\n","10101011");&nbsp;printf("%d\n",10101011);&nbsp;二者输出结果完全一样!如果你想存在int类型数据中,简单的很,前面再加atoi()函数即可。请看:int num = atoi( itoa(num, str, 2) );&nbsp;printf("%d\n",num);&nbsp;3.:%s是是输出字符串的格式控制符,%c是输出单个字符的格式控制符。
打开App,查看更多内容
随时随地看视频慕课网APP