Hãy xem xét một ví dụ được đưa ra bên dưới -
Ví dụ
Đầu vào như sau:
Nhập số nhị phân:10010001
Đầu ra như sau:
Phần bù của 1 của 10010001 là 01101110
Phần bù của 2 trong số 10010001 là 01101111
Thuật toán
Tham khảo một thuật toán để tìm 2 phần bổ sung cho một số nhị phân nhất định.
Bước 1 - Bắt đầu.
Bước 2 - Đọc số nhị phân trong thời gian chạy.
Bước 3 - Sao chép số nhị phân sang strdp.
Bước 4 - len:=strlen (str)
Bước 5 - For i =0 to len-1 do
Bước 5.1 - if str [i] ==‘1’ then
Bước 5.1.1 - str [i] ==‘0’
Bước 5.2 - Khác
Bước 5.2.1 - str [i] ==‘1’
Bước 5.3 - i:=i + 1
Bước 6 - Mặt nạ:=1
Bước 7 - Đối với i:=len-1 to 0 do
Bước 7.1 - if mask ==1 then
Bước 7.1.1 - if str [i] ==‘1’ then
Bước 7.1.1.1 - str [i]:=‘0’
Bước 7.1.1.2 - mask:=1
Bước 7.1.2 - khác
Bước 7.1.2.1 - str [i]:=‘1’
Bước 7.1.2.2 - mask:=0
Bước 7.1.3 - Kết thúc nếu
Bước 7.2 - Kết thúc nếu
Bước 8 - In phần bổ sung của 2.
Bước 9 - Dừng lại.
Chương trình
Sau đây là chương trình C để tìm phần bổ sung 2’c cho một số nhị phân nhất định -
#include <string.h>
#include<stdio.h>
main(){
char str[32],strdp[32];
int mask,i;
printf("Enter a binary number:");
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);
} Đầu ra
Khi chương trình trên được thực thi, nó tạo ra kết quả sau -
Enter a binary number:11001110 1's complement of 11001110 is 00110001 2's complement of 11001110 is 00110010