为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2023-03-05 22:18:24
//实现无符号循环右移;#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;}
查看完整描述

2 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

#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;
}


查看完整回答
反对 回复 2023-03-08
?
LEATH

TA贡献1936条经验 获得超6个赞

1.在这里,return 0;的作用仅仅是表示mian()函数运行结束。作用是不执行后面的的system("pause"); 语句.

2.函数itoa求出的只是该二进制数对应的“字符串”是char类型,不是int类型的数据。这里只是看个结果,所以,用字符串足已。
请看:
printf("%s\n","10101011"); 
printf("%d\n",10101011); 
二者输出结果完全一样!

如果你想存在int类型数据中,简单的很,前面再加atoi()函数即可。
请看:
int num = atoi( itoa(num, str, 2) ); 
printf("%d\n",num); 

3.:%s是是输出字符串的格式控制符,%c是输出单个字符的格式控制符。

查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信