Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

ค้นหา 2'c เติมเต็มสำหรับเลขฐานสองที่กำหนดโดยใช้ภาษา C


ลองพิจารณาตัวอย่างด้านล่าง −

ตัวอย่าง

อินพุต เป็นดังนี้:

ป้อนเลขฐานสอง: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