📜  C中的2s补码

📅  最后修改于: 2020-10-22 00:53:39             🧑  作者: Mango

C中的2s补码是什么?

C中的2s补码由C中的1s补码生成。众所周知,二进制数的1s补码是通过将位1转换为0和0转换为1来创建的;通过将二进制数的1s补码加1来生成二进制数的2s补码。

简而言之,我们可以说C中的2s补码定义为C中一个人的补码与一个人的补码之和。

在上图中,二进制数等于00010100,并且其补码通过将位1转换为0以及将0转换为1来计算。因此,一个人的补数变为11101011。计算一个人的补数后,我们通过在一个人的补数上加1来计算两个人的补数,其结果为11101100。

让我们创建一个2s补码程序。

#include 
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=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]数组保存二进制数的1的补数,而twoscomplement [n + 1]数组保存二进制数的2的补数。
  • 初始化进位变量并为该变量分配1值。
  • 声明后,我们输入二进制数。
  • 现在,我们只需计算一个二进制数的补数即可。为此,我们创建一个循环遍历二进制数组for(int i = 0; i 循环。在for循环中,检查条件是该位是1还是0。如果该位是1,则onecomplement [i] = 0elsecomplement [i] = 1 。这样,生成二进制数的补码。
  • 计算完一个补码后,我们生成一个二进制数的2s补码。为此,我们创建了一个从最后一个元素迭代到开始元素的循环。在for循环中,我们具有三个条件:
    • 如果onescomplement [i]的位为1,进位的值为1,则将0放入twocomplement [i]。
    • 如果onescomplement [i]的位为0,进位的值为1,则将1放入twoscomplement [i],将0放入进位。
    • 如果以上两个条件为假,则onescomplement [i]等于twoscomplement [i]。