考虑下面给出的例子 -
该输入如下:
输入一个二进制数:10010001
该输出是如下:
10010001 的补码是 01101110
10010001 的 2 的补码是 01101111
请参阅算法以找到给定二进制数的 2'c 补码。
步骤 1 - 开始。
步骤 2 - 在运行时读取二进制数。
步骤 3 - 将二进制数复制到 strdp。
第 4 步 - len:= strlen(str)
步骤 5 - 对于 i = 0 到 len-1 做
步骤 5.1 - 如果 str[i] == '1' 那么
步骤 5.1.1 - str[i] == '0'
步骤 5.2 - 其他
步骤 5.2.1 - str[i] == '1'
步骤 5.3 - i: = i+1
第 6 步 - 掩码:= 1
步骤 7 - 对于 i: = len-1 to 0 do
步骤 7.1 - 如果掩码 == 1 那么
步骤 7.1.1 - 如果 str[i] == '1' 那么
步骤 7.1.1.1 - str[i]: = '0'
步骤 7.1.1.2 - 掩码:= 1
步骤 7.1.2 - 其他
步骤 7.1.2.1 - str[i]: = '1'
步骤 7.1.2.2 - 掩码:= 0
步骤 7.1.3 - 如果
步骤 7.2 - 如果
步骤 8 - 打印 2 的补码。
步骤 9 - 停止。
以下是用于查找给定二进制数的 2'c 补码的 C 程序-
#include <string.h> #include<stdio.h> main(){ char str[32],strdp[32]; int mask,i; printf("输入一个二进制数:"); scanf("%s",str); strcpy(strdp,str); for(i=0;i<strlen(str);i++) /* computing 1's complement */{ if(str[i]=='1') str[i]='0'; else str[i]='1'; } printf("1\'s complement of %s is %s\n",strdp,str); mask=1; for(i=strlen(str)-1;i>=0;i--){ if(mask==1){ if(str[i]=='1'){ str[i]='0'; mask=1; } else{ str[i]='1'; mask=0; } } } printf("2\'s complement of %s is %s",strdp,str); }输出结果
执行上述程序时,会产生以下结果 -
输入一个二进制数:11001110 1's complement of 11001110 is 00110001 2's complement of 11001110 is 00110010