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