求原碼、補碼,反碼(C語言源代碼)


#include <stdio.h>

#define N 8 //這里你要求是8位

int main(int argc, const char * argv[]) {

    int binary[8];//用於存放最后取得的補碼

    int a=0;//要處理的數值

    int a1=0;//保存a的值

    int m=0;//用於存放臨時的數值

    printf("請輸入要轉換成二進制補碼的數的值:\n");

    scanf("%d",&a);

    a1=a;

    if (a==0) {

        for (int i=0; i<N; i++) {

            binary[i]=0;

        }

    }else if (a<0){//負數部分開始

        binary[0]=1;

        a=-a;

        

        //求原碼部分開始

        for (int i=N-1; i>0; i--) {

            binary[i]=a%2;

            a=a/2;

            if (a<1) {

                m=i;

                break;

            }

        }//求源碼部分結束

        printf("%d的原碼值為:          ",a1);

        for (int i=0; i<N; i++) {

            printf("%d",binary[i]);

        }

        printf("\n");

        for (int i=m; i<N; i++) {//負數取反部分,第一位符號位不變。

            if (binary[i]==0) {

                binary[i]=1;

            }

            else binary[i]=0;

        }

 

        binary[N-1]=binary[N-1]+1;

        for (int i=N-1; i>0; i--) {

            if (binary[i]>1) {

                binary[i]=0;

                binary[i-1]=binary[i-1]+1;

                if (binary[i-1]<2) {

                    break;

                }

            }

        }

        //負數部分結束

        

        

    }else{

        binary[0]=0;

        for (int i=N-1; i>0; i--) {

                binary[i]=a%2;

                a=a/2;

            if (a<1) {

                m=i;

                break;

            }

        }

        for (int i=1; i<m; i++) {

            binary[i]=0;

        }

        printf("%d的原碼值為:          ",a1);

        for (int i=0; i<N; i++) {

            printf("%d",binary[i]);

        }

        printf("\n");

    }

    printf("%d的補碼值為:          ",a1);

    for (int i=0; i<N; i++) {

        printf("%d",binary[i]);

    }

    printf("\n");

    return 0;

}

 

運行結果截圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM