30/09/2018, 17:08

Biểu diễn số nguyên có dấu ở các hệ đếm khác nhau như thế nào?

Như tít, ở hệ 10 thì biểu diễn số có dấu thông qua dấu ở phía trước, ví dụ: +7; -13…

Vậy trong hệ 8 và hệ 16 có biểu diễn dấu như trên không nhỉ?
-0714? -21C?

Mình chưa biết chỗ này mong các bạn thông não giúp phát

Mai Anh Dũng viết 19:18 ngày 30/09/2018

Hệ 10 ta dùng dấu +-. Nhưng các hệ khác ta đổi sang hệ nhị phân rồi tìm số âm của số đó, sau đó đổi ngược lại để được số âm.

Ví dụ ta có số 0xC = 12, vậy số âm của 0xC thể hiện như thế nào?

Trước hết đổi 0xC về nhị phân.

0xC = 1100

Vậy số âm của 1100 là bao nhiêu, xem cách đổi bù hai bằng tiếng Anh hoặc tiếng Việt ta sẽ đổi được như sau

-0xC = 11110100

Có được giá trị âm của 0xC11110100, bây giờ ta đổi 11110100 ngược lại hệ 16 ta sẽ được F4.

Vậy số âm của 0xC0xF4.


Ai có biết cách nào đơn giản hơn thì chia sẻ nhé

Phan Ngọc Khiêm viết 19:13 ngày 30/09/2018

số có dấu thì 0xC có giá trị là -4, 12 thì trong hệ 16 có dấu phải là 0x0C, đổi sang nhị phân nếu bắt đầu là 1 thì đó là số âm
còn đổi sang số âm của một số n bit thì lấy 2^n trừ số đó
Ví dụ với 0x0C thì có thể lấy

0x100 - 0x0C = 0xF4
Sơn Trần viết 19:24 ngày 30/09/2018

E đang học môn chương trình dịch.
Vấn đề e gặp phải là: Xây dựng Automate hữu hạn đơn định đoán nhận số nguyên có dấu ở hệ Hexa của ngôn ngữ lập trình C/C++, Xây dựng văn phạm LL1 sản sinh ra số nguyên có dấu trong hệ Hexa của NNLT C/C++.

Nếu rắc rối như trên thì bài toán của e vẫn chưa thể giải được vì như vậy làm sao xây dựng văn phạm với otomat T_T

Gió viết 19:10 ngày 30/09/2018

Nếu mà số của bạn biểu diễn bởi giới hạn số bit xác định (kiểu dữ liệu của máy) thì bạn biểu diễn như của anh @ltd và @ngockhiem Đã nói. Còn nếu không bị giới hạn (python chẳng hạn - số lớn ) thì bạn đơn giản dùng dấu “-” đằng trước là xong. Theo mình nghĩ thì bình thường sử dụng dấu “-” là dc rồi, khi nào cần thiết lắm, muốn biết kiểu “int 16 bit”, hay “long -32bit” … Biểu diễn trong bộ nhớ thế nào thì mới dùng như vậy

Bài liên quan
0