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?

e đang nhầm lẫn chỗ này chút ạ
cho x = -98
chuyển x về hệ 16
thì giờ chuyển x qua hệ 2, rồi lấy bù 2, sau đó biểu diễn 8bit, rồi chuyển qua hệ 16
x = 98 = 1100010
bù 2 x = -98 = 0011110
biểu diễn 8bit x = 0001 1110
chuyển qua 16 x = 1E

hay

chuyển x qua hệ 2, biểu diễn 8 bít, rồi mới lấy bù 2, rồi chuyển qua hệ 16 ?

x = 98 = 1100010
biểu diễn 8bit x = 0110 0010
bù 2 x = -98 = 1001 1110
chuyển qua 16 x = 9E
:smile:

số âm thì bit cao nhất luôn là 1

x = -98 thì x có tổng cộng bao nhiêu bit? Nếu là 8 bit thì -98 phải có dạng 1XXX XXXX

3 Likes

nghĩa là khi biểu diễn số âm, luôn phải biểu diễn 8 bít rồi mới lấy bù 2 ạ?

ví dụ
x = -98
x = 98 = 1100010
biểu diễn 8bit
x = 0110 0010
bù 2
x = 10011110

đúng rồi. Nếu x là số X-bit thì phải ghi đủ X bit rồi mới bù 2 X bit này, ví dụ x là số 32-bit thì phải ghi đủ 32 bit ra rồi bù 2 cho 32 bit (hơi vật vã :joy:). Như cách 1 là mới có 7 bit mà bù 2 là sai rồi.

3 Likes

a ơi, cho e hỏi chút
câu1
khi biểu diễn số âm, hoặc cộng trừ nhân chia với số âm
ví dụ x = -98
thì chuyển 98 qua hệ 2 = 1100010
rồi biểu diễu 8bit = 0110 0010
rồi mới lấy bù 2 hả a? = 1001 1110
e tưởng khi cộng trừ nhân chia số âm, mà bị tràn số, thì mới phải lấy thêm bit chứ

câu 2
cho x = -98 = 1001 1110 bù 2
y = -60 = 1100 0100 bu2
x + y = 0110 0010
nhưng x + y = -158
tại sao bù 2 của 158 lại là x + y = 0110 0010, có bít đầu =0
trương hợp này 158 = 1001 1110
giờ lấy bù 2, 0110 0010, bit đầu lại là số 0 , mà số âm như a nói phải là 1 mà

câu 3/; đề k ghi là biểu diễn mấy bit cả thì làm sao ạ
ví dụ đề của e là
cho x = -98
chuyển x về hệ 16

-158 quá cỡ biểu diễn của 8-bit rồi. 8 bit thì số dương lớn nhất là 127, số âm bé nhất là -128. 158 hay -158 đều quá lớn => tràn số.

nếu muốn biểu diễn -158 thì viết lên 16-bit là thấy

cái này hỏi người ra đề xem x là số có bao nhiêu bit, nếu ko thì cứ quăng 8-bit viết cho khỏe :joy:

2 Likes

tks a, e hiểu rồi ạ :smiley:

8bit số lớn nhất là 255 chứ ạ
158 vẫn < 255

8bit biểu diễn số lớn nhất la 255 chứ ạ,
e đã thử dùng 16bit để biểu diễn bù 2 của 158 , và đã ra, nhưng e vẫn k hiểu
158 <255 tại sao phải dùng 16bit
dùng 9bit cũng ra nhưng k biết có được dùng kiểu lẻ này k :smiley:

8-bit có dấu thì 127 là lớn nhất, bé nhất là -128, còn 8-bit ko dấu thì số bé nhất là 0, lớn nhất là 255.

2 Likes

:smile:a ơi, đề cho 2 số 8bit
x = -98
y = -60
tính x + y
x = 1001 1110 bu2
y = 1100 0100 bu2
x+y = 01100010 bu2
mà x +y = -158
bù 2 của 158 sao lại là 01100010 được à, bit đâu là 0
ở đây x và y đều là số 8bit
nên k biểu diễn nó bằng 16bit , thì k ra là sao ah

0110 0010 là 2 + 32 + 64 = 98
-98 + -60 = 98
ghi thêm chú thích là overflow.

nếu để ý thì sẽ thấy 158 + 98 = 256 = 28. Để tính nhanh -158 bằng bao nhiêu khi tràn số thì cộng thêm 28 vào. Tương tự 158 thì trừ 28. Với số 8-bit thì 0 cũng chính là 256. Cộng 256 cũng là cộng 0. Trừ 256 cũng là trừ 0. Nếu số nào nằm ngoài giới hạn thì cứ cộng “0” hoặc trừ “0” vào cho tới khi nào nó nằm trong giới hạn đó là được.

trục số của số 8-bit ko dấu là
0 1 2 … 126 127 128 129 130 … 254 255 0
trục số của số 8-bit có dấu là
0 1 2… 126 127 -128 -127 -126 … -2 -1 0

số -158 cách bên trái số -128 30 số, hay cách số 127 29 số về bên trái => -158 = 127 - 29 = 98

đề cho vậy có lẽ là để hiểu vụ tràn số là như thế nào đó. Tràn số xảy ra khi cộng 2 số dương ra kết quả là số âm, hoặc cộng 2 số âm ra kết quả là số dương. Hay lấy số dương trừ số âm ra số âm, số âm trừ số dương ra số dương. -98 + -60 = 98 tức là tràn số: tổng 2 số âm lại ra kết quả số dương.

2 Likes

à , e hiểu rồi à, do e chưa hiểu rõ cái tràn số lắm tks a
nhưng mà khi tràn số xảy ra, thì chỉ cần ghi kết quả và ghi chú thêm tràn số, hay là phải giải thích nữa vậy ạ

giải thích thế nào đây =) ghi là 2 số âm cộng lại ra số dương có lẽ cũng được. Hỏi ông thầy đi, có cần giải thích ko, giải thích thế nào là đủ =)

2 Likes

a cho e hỏi chut nữa,
ví dụ cho
x = -98
y = -60
x = 56
q = x + y -z
thực hiện x +y trước sẽ có tràn số,
nhưng thực hiện y -x trước rồi thực hiện x + (y-z) thì k có tràn số
mà biểu thức x + y -z k có dấu ngoạc, k có độ ưu tiên
vậy trường hợp này tính y -z trước rồi tính (y-z) + x cho đỡ tràn nhỉ

có tràn hay ko tràn cũng ra 1 kết quả thôi. Tính thử đi. Cái hay của bù 2 là ở đó. :joy:

với lại x + y - z thì cộng trừ có ưu tiên rõ ràng: phép cộng/trừ bên trái trước rồi phép cộng/trừ bên phải sau, vậy là x+y trước rồi mới trừ z sau. Chừng nào là (x+y) + (y-z) thì mới ko biết là x+y tính trước hay y-z tính trước: x+y và y-z đều nằm trong ngoặc, ưu tiên như nhau. Tuy x+y là vế trái của phép cộng, y-z là vế phải của phép cộng nhưng phép cộng ko đưa ra quy tắc tính vế nào trước.

-98 + -60 = -158 = -158 + 256 = 98
98 - 56 = 42

-60 - 56 = -116
-98 + -116 = -214 = -214 + 256 = 42

2 Likes

thế e lấy bù 1 thì sao?

bù 1 là bù 2 mà chưa cộng thêm 1 vào, có lẽ cũng vậy thôi, thứ tự ko quan trọng.

2 Likes

tks a :blush: :blush: :blush::blush::blush::blush::blush:

ủa, mà a ới, khi công 2 số mà tràn xảy ra, thì ghi là tràn số rồi dừng lại
hay biểu diễn số đó lên với số bít cao hơn rồi, cộng
nhưng với đề cho 8bit , mà cộng bị tràn thì lại làm như a ở trên ạ>?
ví dụ (-98) + (-60)
thì ghi = 98 do tràn số hay sao ạ

ghi do tràn số. Số nguyên nào cũng gặp vấn đề này thôi, làm gì có tự động tăng số bit lên được.

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