c - 制作1的补码,为什么如果我输入负数它不起作用
问题描述
如果我输入正数,它工作得很好,但如果我输入负数,它就不起作用。但是,如果我复制并粘贴唯一的 1 补码部分的代码,它就可以工作。如果我输入-12,它显示绝对值:10001100 和 1 的补码:11110011。idk 为什么它不起作用帮助:(
//1's complement_1
{
printf("\n 1's complement:");
if (decimal_1 < 0)
{ decimal_1 = - decimal_1; bi_1[0] = 1; }
for(i_1=7; i_1>0 ;i_1--)
{
bi_1[i_1]=decimal_1%2;
decimal_1=decimal_1/2;
}
Fcomplement_1[0]=1;
for(i_1=1 ; i_1<8; i_1++ )
{
if (bi_1[i_1]==0)
Fcomplement_1[i_1]=1;
else
Fcomplement_1[i_1]=0;
}
for(i_1=0; i_1<8; i_1++)
printf("%d", Fcomplement_1[i_1]);
}
else
for (i_1=0 ; i_1<8 ; i_1++)
printf("%d",bi_1[i_1]);
}
return 0;
}
解决方案
在 1 的补码块中,您测试decimal_1 < 0
,这绝不是真的,因为它在前一个块中被修改为零。
您或许应该将用户输入复制到第二个变量,以便处理未修改的值。
推荐阅读
- bash - 希望按数字前的最后一个字母对服务器列表进行排序
- flutter - 颤动动态设置选定按钮的颜色
- android - Android HILT SingletonComponent vs GoF Singleton 实例设计模式
- python - 如何修补 com_google_protobuf/python/google/__init__.py?
- emacs - 如何使命令 paredit-forward 在邪恶模式下按预期工作?
- nestjs - NestJS:无法为拥有接口的子模块提供实例
- javascript - protractor-jasmine2-screenshot-reporter 空白截图
- arrays - Yacc 不接受有效输入
- bash - 使用 iconv 解码包含希伯来字符和德语 eszett 的文件
- unity3d - 统一获取输入字段值然后 Debug.Log ing