Ví dụ
Nhập: 10010001
Bù 1: 01101110
Bù 2: 01101111
Thuật toán
- Đảo bit: 0→1, 1→0 → được bù 1.
- Từ bit cuối (LSB) cộng 1: nếu bit là 1 thì đổi thành 0 và nhớ (mask=1), nếu bit là 0 thì đổi thành 1 và dừng (mask=0).
Chương trình C
#include <string.h>
#include <stdio.h>
main() {
char str[32], strdp[32];
int mask, i;
printf("Nhập số nhị phân: ");
scanf("%s", str);
strcpy(strdp, str);
// Bù 1
for (i = 0; i < strlen(str); i++) {
if (str[i] == '1') str[i] = '0';
else str[i] = '1';
}
printf("Bù 1 của %s là %s\n", strdp, str);
// Bù 2
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("Bù 2 của %s là %s", strdp, str);
}
Kết quả
Nhập số nhị phân: 11001110 Bù 1 của 11001110 là 00110001 Bù 2 của 11001110 là 00110010