Cách biểu diễn số nguyên có dấu trong máy tính

Học Tập > Tin học đại cương

Biểu diễn kết quả phép toán dạng số nguyên n bit

✪ Với n bit dùng để biểu diễn số nguyên ta có thể biểu diễn được 2n số nguyên, trong đó:
● Dải số nguyên có dấu là : [-2n-1;2n-1-1]
● Dải số nguyên không dấu là : [0;2n-1]
✪ Trục số học của máy tính biểu diễn số nguyên là một vòng tròn số với 2n vạch chia. Từ vạch số 0 đi thuận chiều kim đồng hồ để tăng dần giá trị, ngược chiều kim đồng hồ để giảm dần giá trị.

Nếu giá trị cao (hoặc bé) vượt quá 1 vòng tròn 2n vạch thì ta vẫn tiếp tục đi theo vòng tròn trục số. Khi đó giá trị hiển thị ra kết quả luôn nằm trong dải số trên vạch chia của đường tròn


✪ Ví dụ với 8 bit biểu diễn số nguyên ● Dải số nguyên có dấu là : [-128;127] ● Dải số nguyên không dấu là : [0;255] ● Vòng tròn trục số là:

Cách biểu diễn số nguyên có dấu trong máy tính

Ta thấy nếu giá trị nhập vào có lớn hay bé đến đâu đi nữa thì vòng tròn trục số vẫn cứ quay đi quay lại. _Với dải số có dấu nếu đưa vào giá trị là 128 thì kết quả hiển thị là -128, vì bình thường liền sau 127 là 128 nhưng liền sau 127 trên trục số tròn theo ví dụ trên là -128. Tương tự nếu nhập vào 129 thì kết quả hiển thị là -127. _Với dải số không dấu nếu nhập vào giá trị 256 thì kết quả hiển thị là 0, vì bình thường liền sau 255 là 256 nhưng liền sau 255 trên trục số tròn theo ví dụ trên là 0. Tương tự nếu nhập vào -1 thì kết quả hiển thị là 255, vì liền trước 0 là 255.

(Đấy chỉ là với ví dụ 8 bit, với n bit bất kì dải số số sẽ là khác nhau. Các bạn cứ đi theo vòng tròn trục số để xác định các số tăng và giảm dần)

✪Lý thuyệt vậy là được rồi, đi vào làm bài tập ví dụ trong sách bài tập nào: Dạng bài : Đưa vào một giá trị tìm kết quả hiển thị ra ngoài màn hình.

Các bước làm bài :

_Bước 1: Xác định dải số _Bước 2: Tính giá trị đưa vào một cách bình thường _Bước 3: +Nếu giá trị tính được nằm trong dải số thì kết quả hiển thị đúng giá trị đó.

+Nếu giá trị tính được lớn hơn dải số thì ta lấy giá trị đó trừ đi 2n (Với n là số bit đề đã cho). Cứ trừ đi 2n cho đến khi giá trị thu được thuộc dải số thì ngừng lại. Đó chính là kết quả hiển thị.


+Nếu giá trị tính được nhỏ hơn dải số thì ta lấy giá trị đó cộng thêm 2n (Với n là số bit đề đã cho). Cứ cộng với 2n cho đến khi giá trị thu được thuộc dải số thì ngừng lại. Đó chính là kết quả hiển thị.
● Tóm gọn lại thì là: (Cái tóm gọn này không hiểu thì không nên cố đọc nha)

Out=In + a.2n

Với
Out là kết quả hiển thị
In là giá trị nhập vào n là số bit đề cho

a là số nguyên thỏa mãn Out thuộc dải số


Ví dụ 1: Cho 2 giá trị A= 195, B=143 được biểu diễn dưới dạng số nguyên không dấu 8 bit trong máy tính. Kết quả phép toán A+B mà máy tính hiển thị là bao nhiêu?
(Bài 40 sách bài tập Tin học đại cương HUST, trang 10) _Vì là số nguyên không dấu 8 bit nên dải số là [0;255] _Giá trị vào A+B=195+143=338 _Vì 338 > 255 (lớn hơn dải số) nên ta có:

338-28=338-256=82 ∈ [0;255]


Vậy kết quả hiển thị là 82
Ví dụ 2: Cho 2 giá trị A= +95, B=+43 được biểu diễn dưới dạng số nguyên có dấu 8 bit trong máy tính. Kết quả phép toán A+B mà máy tính hiển thị là bao nhiêu?
(Bài 41 sách bài tập Tin học đại cương HUST, trang 10) _Vì là số nguyên có dấu 8 bit nên dải số là [-128;127] _Giá trị vào A+B=95+43=138 _Vì 138 > 127 (lớn hơn dải số) nên ta có:

138-28=138-256=-118 ∈ [-128;127]


Vậy kết quả hiển thị là -118
Ví dụ 3: Cho 2 giá trị A= +95, B=-43 được biểu diễn dưới dạng số nguyên có dấu 8 bit trong máy tính. Kết quả phép toán A-B mà máy tính hiển thị là bao nhiêu?
(Bài 42 sách bài tập Tin học đại cương HUST, trang 11) _Vì là số nguyên có dấu 8 bit nên dải số là [-128;127] _Giá trị vào A+B=95-(-43)=138 _Vì 138 > 127 (lớn hơn dải số) nên ta có:

138-28=138-256=-118 ∈ [-128;127]


Vậy kết quả hiển thị là -118
Ví dụ 4: Cho 2 giá trị A= -43, B=-95 được biểu diễn dưới dạng số nguyên có dấu 8 bit trong máy tính. Kết quả phép toán A+B mà máy tính hiển thị là bao nhiêu?
(Bài 43 sách bài tập Tin học đại cương HUST, trang 11) _Vì là số nguyên có dấu 8 bit nên dải số là [-128;127] _Giá trị vào A+B=-43+(-95)=-138 _Vì -138 < -128 (bé hơn dải số) nên ta có:

-138+28=-138+256=+118 ∈ [-128;127]


Vậy kết quả hiển thị là +118
Ví dụ 5: Cho 2 giá trị A= 5, B=6 được biểu diễn dưới dạng số nguyên có dấu 4 bit trong máy tính. Kết quả phép toán 2*A+6*B mà máy tính hiển thị là bao nhiêu? _Vì là số nguyên có dấu 4 bit nên dải số là [-8;7] _Giá trị vào 2*A+6*B=10+36=46 _Vì 46 > 7 (lớn hơn dải số) nên ta có:

46-24=46-16=30 > 7 (lớn hơn dải số)


30-24=30-16=14 > 7 (lớn hơn dải số)
14-24=14-16=-2 ∈ [-8;7] Vậy kết quả hiển thị là -2

(Ta thấy bài trên giá trị vào lớn hơn dải số nên ta cứ lấy trừ đi 2n cho đến khi nào giá trị thu được thuộc dải số thì ngừng)


Ví dụ 6: Cho 2 giá trị A= 12, B=6 được biểu diễn dưới dạng số nguyên không dấu 4 bit trong máy tính. Kết quả phép toán A-7*B mà máy tính hiển thị là bao nhiêu? _Vì là số nguyên không dấu 4 bit nên dải số là [0;15] _Giá trị vào A-7*B=12-42=-30 _Vì -30 < 0 (bé hơn dải số) nên ta có:

-30+24=-30+16=-14 < 0 (bé hơn dải số)


-14+24=-14+16=2 ∈ [0;15] Vậy kết quả hiển thị là 2

(Ta thấy bài trên giá trị vào bé hơn dải số nên ta cứ lấy cộng với 2n cho đến khi nào giá trị thu được thuộc dải số thì ngừng)


Có thể bạn quan tâm

ღ Lưu ý: Mình chỉ sử dụng Fanpage Theza2 để bình luận. Mọi nick khác đều không phải mình.
Mình hiện tại có những việc riêng phải bận cho cuộc sống của mình, sẽ không còn thường xuyên hồi đáp các bình luận, mong được lượng thứ..


Liên kết hay đáng ghe thăm:
HocTapHay.com:Tổng hợp kiến thức, bải giảng các môn học Trung học cơ sở, Trung học phổ thông,... khá đầy đủ và chi tiết.

Trong toán học, các số âm (bất kể thuộc hệ cơ số nào) đều được biểu diễn bằng cách thông thường là đặt trước số dương tương ứng một dấu "−" (trừ). Ví dụ: với hệ thập phân, số nguyên âm năm được biểu diễn là −5. Tuy nhiên, trong máy tính, khi mọi ký hiệu, con số,... đều được biểu diễn dưới hệ nhị phân thông qua hai chữ số 0 và 1 thì mọi chuyện lại trở nên phức tạp hơn.

Cách biểu diễn số nguyên có dấu trong máy tính

So sánh giữa các dạng biểu diễn (mẫu 4 bit)

Có nhiều cách được sử dụng để biểu diễn số âm trong máy tính. Bài này chỉ giới thiệu bốn phương pháp chủ yếu nhất, đó là: phương pháp dấu lượng (sign-and-magnitude), bù 1, bù 2 và số quá N (excess-N).

Các máy tính hiện nay hầu hết đều sử dụng phương pháp biểu diễn số bù 2. Tuy nhiên, trong vài tình huống, các phương pháp khác vẫn có thể được sử dụng.

Phương pháp dấu lượng dùng bit cực trái làm bit dấu (sign bit) – tức đại diện cho dấu của số – theo quy ước: nếu bit dấu là 1 thì số là số âm (1 tương đương với dấu "-"), ngược lại, nếu nó là 0 thì số là số dương (0 tương đương với dấu "+"). Các bit còn lại được dùng để biểu diễn độ lớn của số (hay giá trị tuyệt đối – absolute value – của số).

Để biểu diễn một số âm về dạng nhị phân có dấu với mẩu K bit là lấy số cần biểu diễn cộng thêm 2K-1 sau đó biểu diễn chúng ở hệ nhị phân

Theo phương pháp này, một byte 8 bit sẽ có 7 bit (trừ đi bit dấu) được dùng để biểu diễn cho các số có giá trị từ 0000000 (010) đến 1111111 (12710). Khi sử dụng bit dấu, ý nghĩa của 7 bit trên sẽ thay đổi, và ta có thể biểu diễn các số từ −12710 đến +12710. Trong phương pháp dấu lượng, số 0 có thể được biểu diễn ở hai dạng, đó là 00000000 (+0) và 10000000 (−0).

Ví dụ: giả sử mẫu 8 bit, khi sử dụng phương pháp dấu lượng, số 510 được biểu diễn sang hệ nhị phân là: 0000 0101, còn số −5 là 1000 0101.

So sánh với cách biểu diễn số âm mà ta thường sử dụng, ta thấy phương pháp dấu lượng có nhiều điểm tương đồng. Trong hệ thập phân, khi muốn biểu diễn số có dấu, ta đặt dấu cần biểu diễn ngay trước giá trị tuyệt đối của số. Phương pháp dấu lượng cũng đặt dấu ngay trước giá trị tuyệt đối của số, chỉ có khác ở chỗ thay dấu "+" bằng "0" và "−" bằng "1". Có lẽ vì sự tương đồng này, một vài máy tính thế hệ đầu tiên (như IBM 7090) đã sử dụng phương pháp dấu lượng khi biểu diễn số âm.

Phương pháp bù 1 biểu diễn số âm theo cách sau:

  • Thứ nhất, bit dấu 0 nếu số là số dương, và 1 nếu số là số âm.
  • Thứ hai, sử dụng toán tử thao tác bit (bitwise) NOT để đảo tất cả các bit của số nhị phân dương (tính bit dấu) để biểu diễn số âm tương ứng.

Như vậy, phương pháp bù 1 hoàn toàn giống như phương pháp dấu lượng, duy chỉ khác ở cách biểu diễn độ lớn của số.

Ví dụ: dạng bù 1 của 00101011 (43) là 11010100(−43) (xem bài chính về bù 1 để biết cách biểu diễn số thập phân sang nhị phân bằng phương pháp bù 1).

Giống phương pháp dấu lượng, một byte 8 bit áp dụng phương pháp bù 1 cũng có thể biểu diễn các số từ −12710 đến +12710 (chú ý: đã mất đi một bit dùng làm bit dấu). Bù 1 cũng có hai dạng biểu diễn cho số 0, bao gồm: 00000000 (+0) và 11111111 (−0) (mẫu 8 bit).

Khi thực hiện phép cộng giữa hai số biểu diễn theo phương pháp bù 1, ta cũng thực hiện theo quy tắc cộng nhị phân thông thường, tuy nhiên, sau khi đã thực hiện xong, nếu còn phát sinh bit nhớ thì phải tiếp tục cộng bit nhớ này vào kết quả vừa thu được. Về vấn đề này, xin xem thêm ở bài chính về bù 1.

Phương pháp biểu diễn số bù 1 được sử dụng rộng rãi trong các thế hệ máy tính cũ, điển hình là các dòng máy PDP-1 và UNIVAC 1100/2200.

Trong phương pháp bù 2, các số âm được biểu diễn giống như phương pháp bù 1, tuy nhiên, phải cộng thêm 1 vào kết quả (ở hệ nhị phân).

Ví dụ: số −510 được biểu diễn sang hệ nhị phân (xét mẫu 8 bit) sử dụng phương pháp bù 1 là 11111010. Để biểu diễn theo phương pháp bù 2, ta cộng thêm 1 vào số nhị phân ở bù 1, tức cộng 1 cho 11111010: 11111010 + 1 = 11111011. Vậy 11111011 là biểu diễn bằng bù 2 của −510 trong máy tính.

Phương pháp biểu diễn số bù 2 ra đời khi người ta gặp vấn đề với hai phương pháp dấu lượng và bù 1, đó là:

  • Có hai cách biểu diễn cho số 0.
  • Bit nhớ phát sinh sau khi đã thực hiện phép tính phải được cộng tiếp vào kết quả.

Với phương pháp bù 2, số 0 chỉ có một cách biểu diễn duy nhất là 00000000 (mẫu 8 bit). Việc đổi dấu một số – kể cả từ âm sang dương hay từ dương sang âm – đều được thực hiện theo cùng một cách, đó là: đảo tất cả các bit rồi cộng thêm một vào kết quả. Việc thực hiện phép cộng với số biểu diễn theo phương pháp bù 2 được thực hiện hoàn toàn giống như cộng hai số nhị phân bình thường, tuy nhiên, khi phát sinh bit nhớ ở bit dấu, ta có thể bỏ nó đi. Về vấn đề này, xin xem thêm ở bài chính về bù 2.

Với mẫu 8 bit, phương pháp bù 2 có thể biểu diễn tốt các số nguyên có giá trị từ −12810 đến +12710 (so với từ −12710 đến +12710 theo phương pháp dấu lượng và bù 1) do được lợi từ việc tiết kiệm được một cách biểu diễn số 0 (không phân biệt giữa −0 và +0).

Phương pháp biểu diễn số quá N – còn được gọi là biểu diễn số dịch (biased representation) – sử dụng một số nguyên N cho trước làm giá trị dịch ("dịch" hiểu nôm na theo nghĩa "sự dịch chuyển" hay "sự thiên lệch"). Theo phương pháp này, một giá trị thập phân (tức giá trị cần biểu diễn) sẽ được biểu diễn bằng dạng nhị phân của một số dương nào đó sao cho, giá trị của số dương này lớn hơn giá trị cần biểu diễn N đơn vị.

Ví dụ: giả sử cần biểu diễn giá trị 210 theo số quá 5 (mẫu 8 bit):

  • Bước 1: ta có:
    • Giá trị cần biểu diễn: 2.
    • N = 5.
  • Bước 2: xác định số dương lớn hơn 210 năm đơn vị, đó là số 7.

Vậy 210 sẽ được biểu diễn bằng dạng nhị phân của 7: 00000111.

Theo ví dụ trên, ta sẽ có bảng sau:

Số thập phân cần biểu diễn Giá trị thập phân của số quá 5 Do đó, số thập phân sẽ được biểu diễn thành
−5 0 00000000
−4 1 00000001
−3 2 00000010
−2 3 00000011
−1 4 00000100
0 5 00000101
1 6 00000110
2 7 00000111
3 8 00001000
4 9 00001001
5 10 00001010
6 11 00001011
7 12 00001100
8 13 00001101
9 14 00001110
10 15 00001111

Ta thấy, 0 được biểu diễn bằng nhị phân của 5, và −5 được biểu diễn bằng nhị phân của 0. Tổng quát, 0 được biểu diễn bằng nhị phân của N, còn −N được biểu diễn bằng mẫu có tất cả các bit đều là 0.

Phương pháp này ngày nay còn được sử dụng rộng rãi để biểu diễn các số chấm động (floating point number), tiêu biểu là chuẩn số chấm động IEEE. Theo chuẩn này, các số chấm động có độ chính xác đơn (single-precision) 32 bit (như kiểu float của Java) có phần mũ (chính là số lượng ký số của phần nằm sau dấu chấm thập phân) được biểu diễn bằng số quá 127 với mẫu 8 bit, và các số chấm động có độ chính xác đôi (double-precision) 64 bit (như kiểu double của Java) có phần mũ biểu diễn bằng số quá 1023 với mẫu 11 bit.

  • Bù 1
  • Bù 2
  • Số quá 3

Lấy từ “https://vi.wikipedia.org/w/index.php?title=Biểu_diễn_số_âm&oldid=68131026”