Thắc mắc chuyển 1 số âm hệ 10 về hệ 16: biểu diễn 8 bit rồi lấy bù 2, hay lấy bù 2 rồi biểu diễn 8 bit?

x = 135 = 1000 0111(bit đầu là 1)

bit đầu là 1 rồi thì làm sao là số dương được? Nếu là số dương thì tức là x ko có dấu. Nếu y cũng ko dấu thì x + y cho ra 1110 1001 phải hiểu là số ko dấu luôn: 233

nếu x là số có dấu thì vì bit đầu là 1 nên x hiểu là số âm: 135 - 256 = -121
-121 + 98 = -23 (chính là 233 - 256)

2 Likes

a ơi, e hỏi chút ạ

với bài, cho 1 số ,nhưng k nói là số k dấu, hay có dấu, thì khi cộng phải ntn ạ
ví dụ

cho assembly
ax, bx là thanh ghi 16bit

sp = FFFEh

MOV AX 6E8Fh
PUSH AX
POP BX
SUB AX, 9D8Ah
AND AX, 5659h
PUSH AX
PUSH BX

tính giá trị ax và bx ở mỗi dòng
tính giá trị sp

e làm đến chỗ sub bx, 9D8Ah thì k rõ lắm
vì số 16bit
sub thì k biết đây là số có dấu hay k dấu :stuck_out_tongue:
sub 1 lúc ra kết quả k biết đúng hay sai

cứ ghi kết quả theo hex luôn là được. Có dấu hay ko có dấu thì cộng trừ vẫn như nhau mà.

máy tính nó làm phép trừ theo kiểu phép cộng:
A - B = A + ~B + 1
nên có dấu hay ko dấu gì nó ko cần biết

2 Likes

ý e là , có dấu thì miền giá trị khác với k dấu, nếu k biết là có dấu hay k dấu, thì làm sao biết có tràn số khi cộng trừ đâu ạ

ví dụ
bx = 6E8Fh = 0110 1100 1000 1111 = 28303(10)
ax = 9D8Ah = 1001 1101 1000 1010 = 40330(10) (bit đầu là 1 )
sub bx, ax
theo hệ thập phân thì bx - ax = 53590 với số k dấu
nhưng khi trừ , nếu đề k cho số có dấu, hay k dấu thì k biết miền giá trị, thì làm sao biết tràn ạ?

vậy thì kiểm tra bit cao nhất khi trừ có cần phải mượn 1 ko, nếu cần thì là tràn số. Thật ra làm phép trừ là chuyển vế phải thành bù 2 rồi cộng vào. Vậy chỉ cần xét phép cộng. Cộng thì xét xem bit cao nhất sau khi cộng có nhớ 1 ko, nếu có nhớ thì tràn số. (hình như ko đúng với trường hợp này :sweat_smile:)

trường hợp này nếu là số ko dấu thì chắc phải xét là x - y = z, nếu z lớn hơn x thì có tràn số, hoặc y > x thì có tràn :sweat_smile:

1 Like

nó k bù gì cả câu hỏi chỉ hỏi như vậy thôi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?