01/10/2018, 08:37

Phát hiện tràn số khi nhân 2 số nhị phân có dấu?

Em đang làm đồ án KTMT về số nguyên lớn, đến đoạn nhân 2 số nhị phân thì ko biết cách xác định tràn số như thế nào. Ở đây xem 2 số nhị phân đều 4 bit, mong mn giúp đỡ!!!

Tao Không Ngu. viết 10:45 ngày 01/10/2018

Hi Nguyễn Thành Tín.
Cái gì không biết thì hỏi. Tuy nhiên đây là vấn đề đã được giải quyết rồi vậy nên tốt nhất là tìm kiếm tài liệu trước.

Nguyễn Thành Tín viết 10:44 ngày 01/10/2018

Thì là v, nhưng mà tìm toàn tiếng anh. Đôi khi kĩ năng của mình chưa đc tốt thì mình vẫn có quyền hỏi chứ, đơn giản là nếu bạn muốn giúp thì trả lời còn không thì lướt qua cũng đc mà :). Câu hỏi kém chất lượng thì sẽ bị trôi thôi, đâu có gì phải lo lắng

Tao Không Ngu. viết 10:45 ngày 01/10/2018

Hi Nguyễn Thành Tín.
Làm CNTT thì cần phải khá tiếng anh (Không cần TLEIC hay EL ggg). Bạn cứ mạnh dạn đọc đi. Không thì google dịch.

Nguyễn Thành Tín viết 10:51 ngày 01/10/2018

V bạn biết về vấn đề này ko có thể giúp mình, lúc nào cũng vin vào gg r bắt bẻ này nọ thì lập ra group thảo luận để làm gì nhỉ. Trừ phi những câu hỏi quá nhảm mình k nói, nhưng nếu bạn biết thì có thể giúp ko thì lướt qua cũng đc mà

viết 10:41 ngày 01/10/2018

chuyển 2 số 4 bit thành 2 số 8 bit, tính dấu của phép nhân, rồi đảo dấu thành số dương hết, rồi nhân 2 số với nhau. Ktra 4 bit đầu của kết quả, nếu khác 0 thì có tràn số.

Nguyễn Thành Tín viết 10:38 ngày 01/10/2018

Cái chỗ “rồi đảo dấu…” á bạn là đảo dấu 2 số ban đầu hả bn. Với lại bạn biết cái này ở đâu v

viết 10:52 ngày 01/10/2018

nhớ học ở lớp kiến trúc máy tính lâu rồi

chuyển thành số dương mới đúng. Cái này dễ, ví dụ -6 4 bit là 1010, lấy 1010 xor với 1111 rồi cộng 1 là ra 0110 là 6. Nếu là 6 thành chuyển thành số dương vẫn là 6: 0110 xor với 0000 rồi cộng 0. Số 0 hay số 1 lấy từ bit cao nhất nên ko cần if else gì hết.

phép nhân 2 số n bit lúc nào cũng cho kết quả 2n bit. or n bit cao nhất với nhau lại là ra có tràn số hay ko.

vd nhân -2 với 3: 1110 x 0011.

  • dấu của kết quả: lấy 1 xor 0 = 1
  • chuyển vế trái thành số dương: (1110 xor 1111) + 1 = 0010
  • chuyển vế phải thành số dương: (0011 xor 0000) + 0 = 0011
  • thực hiên phép nhân: 0010 x 0011 = 0000 0110
  • tràn bit: 0 or 0 or 0 or 0 = 0
  • kết quả: (0000 0110 xor 1111) + 1 (số 1 lấy từ dấu kết quả) = 1111 1010 (-6)
Nguyễn Thành Tín viết 10:38 ngày 01/10/2018

Bạn có thể nói rõ hơn đc ko, ví dụ cụ thể là -3(1101) và -7(1001) được k bạn

Nguyễn Thành Tín viết 10:48 ngày 01/10/2018

V or 4 bit đầu ra 0 là tràn số hả bn ???

viết 10:52 ngày 01/10/2018

ra 0 là 0 có tràn số @_@ -2 * 3 = -6 làm gì có tràn số ~.~

vd nhân -3 với -7: 1101 x 1001.

  • dấu của kết quả: lấy 1 xor 1 = 0
  • chuyển vế trái thành số dương: (1101 xor 1111) + 1 = 0011
  • chuyển vế phải thành số dương: (1001 xor 1111) + 1 = 0111
  • thực hiên phép nhân: 0011 x 0111 = 0001 0101
  • tràn bit: 0 or 0 or 0 or 1 = 1
  • kết quả 8 bit: (0001 0101 xor 0000) + 0 (số 0 lấy từ dấu kết quả) = 0001 0101 (21)
  • kết quả 4 bit: low = 0101 = 5, high = 0001 = 1. Hay -3 * -7 = 5 (chỉ lấy 4 bit low)

tràn bit = 1 suy ra có tràn số.

Trần Hoàn viết 10:40 ngày 01/10/2018

Trong hệ 4 bit, -3 (1101) và -7 (1001)
Trong hệ 8 bit, -3 (11111101) và -7(11111001), (-3)*(-7)=21 (00010101)
4 bit đầu là 0001 (khác 0000) => 21 không thể biểu diễn trong hệ 4 bit => phép nhân (-3) và (-7) trong hệ 4 bit gây tràn số

Nguyễn Thành Tín viết 10:46 ngày 01/10/2018

à hiểu r, cảm ơn bạn

Bài liên quan
0