这是代码的一部分。在这里,我想通过xor比较数字。 所以它假设给" 0111"但它给出了" 111"结果。 我该如何解决? 所以它假设给" 0111"但它给出了" 111"结果。 我该如何解决?
1 and 1 = 0
1 and 0 = 1
0 and 1 = 1
0 and 0 = 0
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int BinaryRepForDisk1=1101, BinaryRepForDisk2=1010, Disk3=0, xor1, xor2, power=0;
while(BinaryRepForDisk1!=0)
{
xor1=BinaryRepForDisk1%2;
xor2=BinaryRepForDisk2%2;
if(xor1==xor2)
{
Disk3=Disk3+pow(10,power)*0;
power++;
}
else
{
Disk3=Disk3+pow(10,power)*1;
power++;
}
BinaryRepForDisk1=BinaryRepForDisk1/10;
BinaryRepForDisk2=BinaryRepForDisk2/10;
}
printf("%d",Disk3);
system("pause");
return 0;
}
答案 0 :(得分:0)
它是相同的数字,因为你正在使用小数。唯一的问题是,如果您希望将打印结果强制为4位数并用零填充,请使用不同的打印格式化程序:
printf("%04d",Disk3);
答案 1 :(得分:0)
如果您使用二进制数字,则需要在数字前使用 0b :
int BinaryDisk1 = 0b1101, BinaryDisk2 = 0b1010;
C也有一点xor位:
int result = BinaryDisk1 ^ BinaryDisk2;
我希望这可以帮到你。
答案 2 :(得分:0)
使用时
int BinaryRepForDisk1=1101, BinaryRepForDisk2=1010;
您正在将BinaryRepForDisk1
初始化为十进制数1101
,而不是二进制数1101
。要获得二进制1101
的十进制等效值,可以使用:
int BinaryRepForDisk1= ( (1 << 3) + (1 << 2) + 0 + 1);
// You can use (0 << 1) to keep the familiar structure but its not needed.
如果您的编译器支持二进制文字,您可以使用:
int BinaryRepForDisk1= 0b1101;
您可以对BinaryRepForDisk2
的值进行类似的调整。