在C语言中,二补数是通过一补数生成的。我们知道,二进制数的一补数是通过将1变为0,0变为1来创建的;而二进制数的二补数是在一补数的基础上加1得到的。

简而言之,我们可以说C语言中的二补数定义为一补数与1的和。

2s-complement-in-c.png

在上面的图中,二进制数等于00010100,它的一补数是通过将位1变为0,0变为1来计算的。因此,一补数变为11101011。在计算完一补数后,我们通过将1加到一补数上计算出二补数,其结果为11101100。

让我们创建一个二补数的程序。

#include <stdio.h>

int main()
{
    int n;  // 变量声明
    printf("请输入要输入的位数:");
    scanf("%d", &n);
    char binary[n + 1];  // 二进制数组声明
    char onescomplement[n + 1]; // 一补数数组声明
    char twoscomplement[n + 1]; // 二补数数组声明
    int carry = 1; // 变量初始化
    printf("\n请输入二进制数:");
    scanf("%s", binary);
    printf("%s", binary);
    printf("\n该二进制数的一补数为:");

    // 计算一补数
    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("\n该二进制数的二补数为:");

    // 计算二补数
    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;
}

程序解析

1、首先,我们输入位数并将其存储在变量'n'中。

2、在输入位数后,我们声明字符数组char binary[n+1],用于存储二进制数。这里的'n'是我们在前一步中输入的位数,它确定了数组的大小。

3、我们还声明了两个数组,即onescomplement[n+1]和twoscomplement[n+1]。onescomplement[n+1]数组存储二进制数的一补数,twoscomplement[n+1]数组存储二进制数的二补数。

4、初始化carry变量,并将其赋值为1。

5、在声明后,我们输入二进制数。

6、现在,我们简单地计算二进制数的一补数。为此,我们创建一个循环,从二进制数组的第一个元素到最后一个元素进行迭代(for(int i=0;i<n;i++)。在循环中,我们检查条件以确定位是1还是0。如果位是1,则onescomplement[i]=0;否则onescomplement[i]=1。通过这种方式,生成了二进制数的一补数。

7、在计算一补数之后,我们计算二进制数的二补数。为此,我们创建一个循环,从最后一个元素到第一个元素进行迭代(for(int i=n-1;i>=0;i--)。在循环中,我们有三个条件:

  • 如果onescomplement[i]的位为1且carry的值为1,则将0放入twoscomplement[i]。
  • 如果onescomplement[i]的位为0且carry的值为1,则将1放入twoscomplement[i],并将carry置为0。
  • 如果上述两个条件都不成立,则onescomplement[i]等于twoscomplement[i]。

标签: c语言, c语言教程, c语言技术, c语言学习, c语言学习教程, c语言下载, c语言开发, c语言入门教程, c语言进阶教程, c语言高级教程, c语言面试题, c语言笔试题, c语言编程思想