Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中的二进制操作_C_Binary - Fatal编程技术网

C语言中的二进制操作

C语言中的二进制操作,c,binary,C,Binary,我在写二进制的加法、减法、乘法和除法程序时遇到了一些问题。我面临的主要问题是,能够将程序限制为输出1和0(二进制部分),并且它还需要能够将二进制操作为小数,例如101.1或1.0101。下面是我在研究过程中在网上找到的一个程序,但我还不完全了解它是如何工作的,因为它还没有实现我自己的程序,也不能计算包含小数的二进制代码。我不想使用数组,因为它限制了最大输出,这取决于您为进行这些计算而留出的位 期待一些潜在的想法 #include<stdio.h> int main(){

我在写二进制的加法、减法、乘法和除法程序时遇到了一些问题。我面临的主要问题是,能够将程序限制为输出1和0(二进制部分),并且它还需要能够将二进制操作为小数,例如101.1或1.0101。下面是我在研究过程中在网上找到的一个程序,但我还不完全了解它是如何工作的,因为它还没有实现我自己的程序,也不能计算包含小数的二进制代码。我不想使用数组,因为它限制了最大输出,这取决于您为进行这些计算而留出的位

期待一些潜在的想法

#include<stdio.h>

int main(){

    long int binary1,binary2;
    int i=0,remainder = 0,sum[20];

    printf("Enter any first binary number: ");
    scanf("%ld",&binary1);
    printf("Enter any second binary number: ");
    scanf("%ld",&binary2);

    while(binary1!=0||binary2!=0){
         sum[i++] =  (binary1 %10 + binary2 %10 + remainder ) % 2;
         remainder = (binary1 %10 + binary2 %10 + remainder ) / 2;
         binary1 = binary1/10;
         binary2 = binary2/10;
    }

    if(remainder!=0)
         sum[i++] = remainder;

    --i;
    printf("Sum of two binary numbers: ");
    while(i>=0)
         printf("%d",sum[i--]);

   return 0;
}
#包括
int main(){
长整数二进制1,二进制2;
整数i=0,余数=0,和[20];
printf(“输入任何第一个二进制数:”);
scanf(“%ld”、&binary1);
printf(“输入任何第二个二进制数:”);
scanf(“%ld”、&binary2);
而(二进制1!=0 | |二进制2!=0){
总和[i++]=(二进制1%10+二进制2%10+余数)%2;
余数=(二进制1%10+二进制2%10+余数)/2;
binary1=binary1/10;
binary2=binary2/10;
}
如果(余数!=0)
和[i++]=余数;
--一,;
printf(“两个二进制数之和:”);
而(i>=0)
printf(“%d”,和[i--]);
返回0;
}

如果您有定点十进制数,则该代码可能有效

我建议将字符串解析为一个双倍数字,然后使用标准算术。 要分析数字,请在“.”十进制分隔符上拆分字符串。 从右到左解析整数部分,将1和0乘以2的幂,从0开始。然后解析另一个字符串(小数部分)乘以从1开始的2的增长幂的倒数

例如: 110.11001

110+11001

整数,反向=0*2^0+1*2^1+1*2^2
Decimal=1*2^-1+1*2^-2+0*2^-3+0*2^-4+1*2^-5这听起来可能令人震惊,但今天的计算机用二进制处理所有这些值<代码>整数a=10;int b=10;INTC=a+b瞧,这是二进制和。。。你的问题是格式。(正如Ivaylo指出的:将它们作为输入…)这个程序不可能处理十进制二进制数。它使用
%ld
读取输入的数字。可能您需要使用
%s
将输入读取为字符串,我不想使用数组,因为它限制了最大输出,这取决于您为进行这些计算而留出的位
,这也可能令人震惊,但是这里的数据类型也不是无限的……对于
float
采用数组大小33,对于
double
采用数组大小65。