Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Tìm bù 2 (Two's Complement) của số nhị phân trong C


Bù 2 của số nhị phân tính bằng 2 cách:

  1. Chuyển sang bù 1 (đảo bit) rồi cộng 1.
  2. Từ LSB: giữ nguyên các 0 sau bit 1 đầu tiên, bit 1 đó giữ nguyên, các bit còn lại đảo ngược.

Thuật toán code

Tính bù 1:

for i=0..SIZE-1:
    if num[i]=='0' one[i]='1';
    else one[i]='0';

Tính bù 2 từ bù 1 (cộng 1):

carry = 1;
for i=SIZE-1 downto 0:
    if one[i]=='1' && carry==1: two[i]='0';
    else if one[i]=='0' && carry==1: two[i]='1'; carry=0;
    else two[i]=one[i];

Chương trình hoàn chỉnh (8 bit)

#include <stdio.h>
#include <stdlib.h>
#define SIZE 8
int main() {
    char num[SIZE+1], one[SIZE+1], two[SIZE+1];
    int i, carry = 1;
    printf("Nhap so nhi phan (8 bit): ");
    scanf("%s", num);
    // Bu 1
    for (i=0; i=0; i--) {
        if (one[i]=='1' && carry) { two[i]='0'; }
        else if (one[i]=='0' && carry) { two[i]='1'; carry=0; }
        else two[i]=one[i];
    }
    two[SIZE] = '\0';
    printf("Bu 2: %s\n", two);
    return 0;
}

Kết quả

Nhap so nhi phan: 1000010
Bu 1: 0111101
Bu 2: 0111110