Được rồi, tôi đã nấu một số mã để đảo ngược các ký tự hex xung quanh như một phần của bài tập vui nhộn mà tôi đã tạo.Có gì sai với thuật toán của tôi?
Dưới đây là những gì tôi có vào lúc này:
#include <stdio.h>
int main() {
char a,b,c;
while (1) {
c = getchar();
if (!feof(stdin)) {
a = c % 16;
b = (c - a)/16;
c = (a*16) + b;
putchar(c);
}else{break;}
}
return 0;
}
Nó hoạt động tốt cho hầu hết các giá trị. Ví dụ: 0xA0 trở thành 0x0A v.v ...
Tuy nhiên, nó không hoạt động tốt với các giá trị bắt đầu bằng 'F'.
0xF1 trở thành 0x10
0xFF trở thành 0xF0
vv ...
ai đó có thể điểm tôi vào đúng hướng?
bạn cần khoảng không để toán học hoạt động. sử dụng int cho a và b chứ không phải char. Hoặc chuyển sang sử dụng các phép toán bitwise (>><< & và |) thay vì các phép toán. –
@KennyTM: bạn có thể có nghĩa là 'putchar (cc >> 4 | (cc & 0xf) << 4); ' – mjv
Như một lưu ý bổ sung: không cần phải trừ' a' từ 'c' trước khi chia cho 16.' b = c/16' sẽ cho bạn kết quả tương tự. Đây là cách phân chia số nguyên hoạt động trong C. – AnT