[C/C++] Hiển thị số hệ 2, hệ 8, hệ 16 của số thập phân
Để hiển thị số hệ 10 sang các hệ khác, thông thường chúng ta nghĩ đến cách đổi chúng ra các hệ kia bằng thuật toán. Nếu muốn vậy bạn có thể tìm thêm trên Google đã có nhiều bài viết về các thuật toán đó rồi, ở đây mình nêu một số cách mà chúng ta không cần dùng thuật toán mà có thể hiển thị ngay.
VD: Nhập 1 số hệ 10 rồi xuất ra hệ 16.
#include <stdio.h> #include <stdlib.h> void Hex(int n) { if (n < 16) { printf("%c","0123456789ABCDEF"[n]); // hien thi ky tu thu n trong chuoi return; } else Hex(n / 16); printf("%c","0123456789ABCDEF"[n % 16]); } int main() { int n; printf("Enter your number: "); scanf("%d", &n); printf("Number in hex:"); Hex(n); return 0; }
Nếu bạn để ý kỹ thì trong code trên chúng ta vẫn sử dụng thuật toán chia cho 16 dùng đệ quy. Cách này cũng áp dụng tốt cho hệ 2 và hệ 8. Ngoài ra chúng ta có thể sử dụng hàm ltoa để chuyển đổi (các bạn tự search).
Vậy không dùng thuật toán thì làm thế nào? Đơn giản như sau:
#include <stdio.h> #include <stdlib.h> int main() { int n; printf("Enter your number: "); scanf("%d", &n); printf("Number in hex: %X", n); // in ra so Hex bang dinh dang %X return 0; }
Thật đơn giản và ngắn gọn phải không? :D.
Thông tin thêm:
Để biểu diễn một số thuộc kiểu gì đó dưới dạng một số hệ nào đó: ví dụ bạn nhập vào một số nguyên giờ muốn biểu diễn nó lên màn hình.
– Định dạng hệ 10 sử dụng %d
– Định dạng hệ 8 sử dụng %o
– Định dạng hệ 16 sử dụng %x (hoặc X để viết hoa các chữ cái)
Để ý, chúng ta có thể nhập được số hệ 16 hay hệ 8 và in ra các hệ 8, 10, 16 mà bạn muốn.
VD nhập vào số hệ 16 in ra số hệ 8, hệ 10.
#include <stdio.h> #include <stdlib.h> int main() { int n; printf("Enter your number in Hex: "); scanf("%x", &n); printf("Number in Oct: %on", n); printf("Number in Dec: %dn", n); return 0; }
KQ:
Enter your number in Hex: D2F
Number in Oct: 6457
Number in Dec: 3375
Tham khảo thêm:
Sự khác nhau giữa %d và %i trong lập trình C
In ra số hex
convert một số hệ thập phân sang hệ 16 hoặc hệ 2, theo cách nhanh nhất
Anh ơi. nếu em muốn chuyển qua nhị phân thì dung “%…” gì ạ?
Hệ 2 thì phải dùng thuật toán thôi, mình cũng không biết nó biểu diễn tắt thế nào.
void decToBin(int n)
{
if(n <= 1)
{
printf("%d", n);
}
else
{
decToBin(n/2);
printf("%d", n%2);
}
}
#include <stdio.h>
void decToBin(int n)
{
if(n < 10)
{
printf("%d", n);
}
else if(n < 16)
{
switch(n)
{
case 10: printf("A"); break;
case 11: printf("B"); break;
case 12: printf("C"); break;
case 13: printf("D"); break;
case 14: printf("E"); break;
case 15: printf("F"); break;
}
}
else
{
decToBin(n/16);
printf("%d", n%16);
}
}
main()
{
// decToBin(30);
for(int i = 9; i <= 40; i++)
{
printf("\n%d = ", i);
decToBin(i);
}
}
anh ơi code này thì sai ở đoạn nào nhỉ
Cái này bạn cần đổi về hệ 10. sau đó đổi từ hệ 10 về hệ 2.
không phải anh ơi em đang chuyển từ hệ 10 sang 16 cơ mà
Thế mà ghi decToBin(10 sang 2)
Sửa lại code như sau nhé:
Em cảm ơn 😀
sai thứ tự else
{
decToBin(n/16);
printf(“%d”, n%16);
}
thế mà nghĩ mãi không ra 😀
anh ơi cho em hỏi chuyển từ hệ 16 sang hệ 10 ta viết như thế nào dùng C++
Bạn ơi cho mình hỏi mình muốn biểu diễn số phức trong hệ hexa phải làm sao vậy?
Mình cũng chưa tìm hiểu cái này 🙂
muốn in ngược kq của hệ 16 thì làm sao hả anh
Cảm ơn bài viết hữu ích của anh. Nhưng em còn chút chưa hiểu và thắc mắc là: nếu muốn chuyển kết quả hiện thị mã ASCII (trong dev c++) từ hệ 10 sang các hệ khác chúng ta phải làm thế nào? Em cảm ơn!
Trong bài có hết rồi mà bạn.
có cách nào để đổi nhanh không anh. Ý em là vậy :))
e muốn chuyển từ nhị phân qua hexa thì ntn ạ’
bạn có thể chuyển qua 10 rồi qua hex nhé.