C 为什么不是';我的程序能正确地将十进制转换成二进制吗?

C 为什么不是';我的程序能正确地将十进制转换成二进制吗?,c,eclipse,C,Eclipse,我有一个任务,要求我将十进制数转换为存储在字符数组中的16位2的补码二进制表示形式。我得到了一个启动代码,其中包括一个完整的main方法和一个addOne方法。我只需要完成flipBits和magnityToBinary方法 我已经完成了这些方法,它们应该可以工作,但是我得到了字符串输出。例如: Enter integers and convert it to 2's complement binary. Non-numeric input terminates program. 27 Inte

我有一个任务,要求我将十进制数转换为存储在字符数组中的16位2的补码二进制表示形式。我得到了一个启动代码,其中包括一个完整的main方法和一个
addOne
方法。我只需要完成
flipBits
magnityToBinary
方法

我已经完成了这些方法,它们应该可以工作,但是我得到了字符串输出。例如:

Enter integers and convert it to 2's complement binary.
Non-numeric input terminates program.
27
Integer: 27, 2's complement binary: 
代码如下:

#包括
#包括
#包括
#包括
空震级二进制(int n,char arr[],int numobits);
无效翻转位(字符arr[],整数位);
void addOne(字符arr[],整数位数);
内部主(空){
setvbuf(标准输出,空,0);
//声明大小为16的字符数组以模拟16位二进制
int numobits=16;
字符arr[numobits+1];
arr[numobits]='\0';//设置终止字符
//声明整数n以保存十进制整数
int n=0;
puts(“输入整数并将其转换为2的补码二进制。”);
puts(“非数字输入终止程序”);
//不断地获取输入并将其转换为二进制
而(scanf(“%d”,&n)==1){//如果成功读取一个十进制整数
//将字符数组初始化为所有0(保留终止字符不变)
for(int i=0;i=0;i--){
如果(进位!=arr[i]){
arr[i]=“1”;
进位='0';
}
else if(进位='1'){
arr[i]=“0”;
}
否则{
arr[i]=“0”;
}
}
返回;
}
/*flipBits:对二进制文件执行1的补码,即将1更改为0,将0更改为1
*输入:char arr[]:保存二进制文件的字符数组
*int numobits:二进制文件中的位数*
* */
无效翻转位(字符arr[],整数位){
//在这里实现您的解决方案
for(int i=0;i0){
arr[i]=n%2;
n=n/2;
i++;
}
返回;
}

我只想看到正确的二进制输出。现在我不确定这是否是我的错误,我的教授的错误,或者Eclipse是否出了问题。感谢您的帮助,谢谢

尝试将magnitudeToBinary()中的行更改为:


您想将“1”或“0”的ASCII值写入数组,而不是n%2的结果。

我觉得
magnityToBinary
函数很可疑。@Jabberwocky lol!你知道为什么吗?听说过将十进制转换成二进制的除法余数吗?我讨厌它
arr[I]=n%2应该是
arr[i]=n%2+'0'。那就可以了。你把数字和ASCII码混在一起了。实际上你不需要除法余数之类的东西,因为数字已经是二进制的,你可以使用移位操作和掩码操作直接访问位。它现在打印出来了!我不相信它打印的是正确的二进制文件,但我想如果我自己不能解决这个问题,我会问另一个问题,谢谢你的帮助!它可能是按相反的顺序打印数字,@HelanaBrock。您将最低有效位放在第一位(第零位),而不是最后一位。@JonathanLeffler真棒,谢谢!我想我已经解决了。在-27的情况下,8位输出为11100101。对于16位,我的程序正在打印11111111 00101,它的最后8位正确,但我不确定其余的是否也应该是1位?它对所有负数都是这样做的。对于较小的负数,比如-27,前导数字大多是1,这是正常的。震级越大,前导数越少。当然,小的正数大多有前导零;大一点的就少一点。负数的情况正好相反@Helanabrockkw为什么不使用
arr[i]=(n%2==1)==true?”1' : '0';?或者更好的
arr[i]=((n%2==1)=true)=true?“1':“0”
    arr[i] = n % 2;
    arr[i] = n % 2 == 1 ? '1' : '0';