C语言2s补码
C中的2s补码是从C中的1s补码生成的。众所周知,二进制数的1s补码是创建的。通过将位1转换为0和0转换为1;二进制数的2s补数是通过将二进制数的1s补数加1来生成的。
简而言之,可以说C中的2s补数定义为C中的2的补数之和。 C和一个。
在上图中,二进制数等于00010100,其补码是通过将位1转换为0以及将0转换为1来计算的。因此,一个补码变为11101011、计算一个补码后,我们将一个补码加1来计算两个补码,其结果为11101100。
我们创建一个2s补码程序。
#include <stdio.h>
int main()
{
int n; // variable declaration
printf("Enter the number of bits do you want to enter :");
scanf("%d",&n);
char binary[n+1]; // binary array declaration;
char onescomplement[n+1]; // onescomplement array declaration
char twoscomplement[n+1]; // twoscomplement array declaration
int carry=1; // variable initialization
printf("\nEnter the binary number : ");
scanf("%s", binary);
printf("%s", binary);
printf("\nThe ones complement of the binary number is :");
// Finding onescomplement in C
for(int i=0;i<n;i++)
{
if(binary[i]=='0')
onescomplement[i]='1';
else if(binary[i]=='1')
onescomplement[i]='0';
}
onescomplement[n]='\0';
printf("%s",onescomplement);
printf("\nThe twos complement of a binary number is : ");
// Finding twoscomplement in C
for(int i=n-1; i>=0; i--)
{
if(onescomplement[i] == '1' && carry == 1)
{
twoscomplement[i] = '0';
}
else if(onescomplement[i] == '0' && carry == 1)
{
twoscomplement[i] = '1';
carry = 0;
}
else
{
twoscomplement[i] = onescomplement[i];
}
}
twoscomplement[n]='\0';
printf("%s",twoscomplement);
return 0;
}
输出
上述程序的分析
首先,我们输入位数,并将其存储在' n '变量中。
输入位数后,我们声明字符数组,即 char binary [n + 1] ,其中保存了二进制数。 " n "是我们在上一步中输入的位数;它基本上定义了数组的大小。
我们声明了另外两个数组,即 onescomplement [n + 1] 和 twoscomplement [n + 1]。。 onescomplement [n + 1] 数组保留二进制数的补数,而 twoscomplement [n + 1] 数组保留二进制数的补数。
初始化 carry 变量,并为此变量分配1个值。
声明后,我们输入二进制数。
现在,我们只需计算一个二进制数的补数即可。为此,我们创建一个遍历二进制数组 for(int i = 0; i < n; i ++)的循环。在for循环中,检查条件是该位是1还是0。如果该位是1,则 onescomplement [i]=0 else onescomplement [i]=1 。这样,就产生了一个二进制数的补码。
计算完一个补码后,我们生成一个二进制数的2s补码。为此,我们创建一个循环,该循环从最后一个元素迭代到开始元素。在for循环中,我们具有三个条件: 如果onescomplement [i]的位为1,进位的值为1,则将0放入twocomplement [i]。 如果onescomplement [i]的位为0,进位的值为1,则将1放入twoscomplement [i],将0放入进位。 如果以上两个条件为假,则onescomplement [i]等于twoscomplement [i]。