ลองพิจารณาตัวอย่างด้านล่าง −
ตัวอย่าง
อินพุต เป็นดังนี้:
ป้อนเลขฐานสอง:10010001
ผลลัพธ์ เป็นดังนี้:
ส่วนเติมเต็มของ 1 10010001 คือ 01101110
ส่วนเติมเต็มของ 2 10010001 คือ 01101111
อัลกอริทึม
อ้างอิงอัลกอริทึมเพื่อค้นหาการเติมเต็ม 2’c สำหรับเลขฐานสองที่กำหนด
ขั้นตอนที่ 1 - เริ่ม
ขั้นตอนที่ 2 - อ่านเลขฐานสองที่รันไทม์
ขั้นตอนที่ 3 - คัดลอกเลขฐานสองไปที่ strdp
ขั้นตอนที่ 4 − len:=strlen(str)
ขั้นตอนที่ 5 - สำหรับ i =0 ถึง len-1 do
ขั้นตอนที่ 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 ถึง 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 – สิ้นสุด if
ขั้นตอนที่ 7.2 – สิ้นสุดหาก
ขั้นตอนที่ 8 - พิมพ์ส่วนเติมเต็มของ 2
ขั้นตอนที่ 9 - หยุด
โปรแกรม
ต่อไปนี้เป็นโปรแกรม C เพื่อค้นหาการเติมเต็ม 2’c สำหรับเลขฐานสองที่กำหนด −
#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); }
ผลลัพธ์
เมื่อโปรแกรมข้างต้นทำงาน มันจะให้ผลลัพธ์ดังต่อไปนี้ −
Enter a binary number:11001110 1's complement of 11001110 is 00110001 2's complement of 11001110 is 00110010