Ưu điểm của Bổ sung Two là gì?


11

Trong một số thiết bị ADC / DAC, chúng là các tùy chọn để xuất / nhập dữ liệu ở dạng Bổ sung của 2.

Những lợi thế của việc biểu diễn dữ liệu kỹ thuật số ở dạng Bổ sung của Hai Khi bạn chỉ cần có mã nhị phân thẳng và tiết kiệm thời gian chuyển đổi là gì?


4
Lời khen của hai người một mã nhị phân thẳng ...
Vịt Mooing

"Đại số được chạy trên một cỗ máy (vũ trụ) là hai phần bù" - HAKMEM 154 ( inwap.com/pdp10/hbaker/hakmem/hacks.html )
ChrisInEdmont

2
5 trong hai bổ sung là gì? 101. 5 trong mã nhị phân thẳng là gì? 101. -5 trong phần bù của hai là gì? 1 ... 1111011. -5 trong mã nhị phân thẳng là gì?
À

Có vẻ như một trường hợp đặc biệt hiếm hoi có ADC với đầu ra âm? Điều đó có nghĩa gì, rằng điện áp đo được thấp hơn điện áp tham chiếu thấp? Và làm thế nào bạn sẽ xây dựng một ADC như vậy? Xấp xỉ liên tiếp với các mũ có tải âm ...?
Lundin

Lưu ý rằng có hai từ khác nhau , khenkhen . Chủ đề ở đây là hai lời khen ngợi , ngay cả khi những twos đó rất lịch sự và thường nói những điều tốt đẹp về bạn.
Pete Becker

Câu trả lời:


11

Đại diện khen ngợi của hai số nguyên đã ký rất dễ thao tác trong phần cứng. Ví dụ, phủ định (tức là x = -x ) có thể được thực hiện đơn giản bằng cách lật tất cả các bit trong số và thêm một bit. Thực hiện cùng một hoạt động trong nhị phân thô (ví dụ với một bit dấu) thường liên quan đến nhiều công việc hơn, bởi vì bạn phải coi các bit nhất định trong luồng là đặc biệt. Tương tự như vậy đối với phép cộng - thao tác thêm cho số âm giống hệt với thao tác thêm cho số dương, do đó không cần logic bổ sung (không có ý định chơi chữ) để xử lý trường hợp âm.

Mặc dù điều này không có nghĩa là nó dễ dàng hơn từ góc nhìn của bạn, với tư cách là người tiêu dùng dữ liệu này, nó làm giảm nỗ lực thiết kế và độ phức tạp của thiết bị, do đó có lẽ làm cho nó rẻ hơn.


1
Lật bit sau đó thêm 1 để phủ định, không ??
Scott Seidman

2
@ScottSeidman Vâng, xin lỗi, tôi đã quên bit đó. Đã chỉnh sửa để sửa :)
Đa thức

1
Trên thực tế, cho pickiness tối đa, tùy thuộc vào bộ vi xử lý có thể là một chu trình đơn để có x = x * -1, hoặc x = 0 - x , so với ít nhất hai chu kỳ cho x = ~ x + 1
Markt

@markt Có, nhưng nếu bạn chỉ triển khai một thiết bị tối thiểu (nghĩa là không phải là bộ xử lý đầy đủ) thì việc cắt giảm độ phức tạp của silicon xuống mức tối thiểu là điều hợp lý.
Đa thức

5
+1 Ngoài ra, phần bù của Two chỉ có một giá trị duy nhất cho 0. Những phần bổ sung khác (chẳng hạn như phần bù của một hoặc dấu bit) cuối cùng có hai
s chuông

5

ADC có thể chuyển đổi dữ liệu (giả sử điện áp đầu vào trong khoảng từ 0 đến 5V) và bạn cần dữ liệu đó không được ký (0V = 0, 5V = mã tối đa) hoặc đã ký (2.5V = 0, 0V = max -ve, 5V = max + ve).

Ngoài phần bổ sung của 2 là đại diện máy tính phổ biến nhất cho dữ liệu đã ký, việc chuyển đổi giữa hai định dạng được mô tả ở trên là hoàn toàn không quan trọng: chỉ cần đảo ngược MSB!

Điều này cực kỳ rẻ để thêm vào logic bên trong của ADC và cung cấp cho ADC một điểm bán hàng khác trên biểu dữ liệu ...


Chỉ cần thêm công tắc MSB giữa phần bù và phần bù nhị phân của hai phần như một nhận xét bên dưới
Scott Seidman

3

Nếu bạn cần thực hiện phép toán trên các biểu diễn của số âm, bổ sung twos làm cho điều đó dễ dàng hơn so với nhị phân bù, sẽ khớp với kiểu dữ liệu "đã ký int". Trình biên dịch của bạn sẽ chỉ cần biết làm thế nào để đối phó với nó. Nếu không, bạn dành tick đồng hồ chuyển đổi qua lại.


1

Trong câu hỏi, dường như ngụ ý rằng ADC mất nhiều thời gian hơn để trả về giá trị ở dạng bổ sung 2 so với ở dạng nhị phân thẳng. Mặc dù đây có thể là trường hợp trong một số triển khai cụ thể của ADC, nhưng nói chung không đúng (ví dụ, bộ vi điều khiển MSP430 có chip ngoại vi ADC sẽ báo cáo giá trị trong nhị phân thẳng hoặc bổ sung 2, nhưng nó có cùng số chu kỳ trong cả hai trường hợp).

Ngoài ra, sự lựa chọn giữa phần bù nhị phân và nhị phân thẳng chủ yếu phụ thuộc vào cách các bộ chuyển đổi của bạn hoạt động và cách bạn muốn xử lý dữ liệu của mình.

Trong chế độ nhị phân thẳng, ADC sẽ cung cấp cho bạn một số biểu thị tỷ lệ giữa độ lớn của đại lượng tương tự được đo (hầu như luôn luôn là điện áp) và đại lượng tham chiếu toàn thang đo. Ví dụ, ADC 10 bit có thể trả về các giá trị từ 0 đến 1023 (đã bao gồm). Nếu bạn đo điện áp (giả sử là 1,25 Volts) bằng một nửa điện áp tham chiếu của ADC (giả sử là 2,50 Volts), mã nhị phân bạn đọc sẽ bằng một nửa giá trị tối đa bạn có thể đọc - vì vậy, 512, hoặc ở đâu đó, tùy thuộc vào làm tròn và phi tuyến tính trong ADC.

Ví dụ: giả sử bạn có một bộ chuyển đổi báo cáo lượng nhiên liệu tên lửa trong một chiếc xe tăng. 0V có nghĩa là bể trống và Vôn 2.5V có nghĩa là nó đầy. Vì vậy, bạn chỉ cần kết nối đầu dò với ADC của bạn, và bạn đi!

Nhưng lưu ý rằng trong đoạn văn trên, không có cách nào để đo điện áp âm. Điều gì sẽ xảy ra nếu chúng ta muốn đo lưu lượng nhiên liệu tên lửa vào và ra khỏi xe tăng (và chúng ta có một bộ chuyển đổi để làm như vậy)? ADC không thể đo các số âm, vì vậy chúng tôi có một vấn đề. Tuy nhiên, có một cách dễ dàng để giả mạo nó bằng chế độ bổ sung của 2: Trong trường hợp này, đầu ra của bộ chuyển đổi được phân cực lại sao cho điểm 0 nằm giữa hai điện áp tham chiếu của ADC. Nói cách khác, dòng dương được biểu thị bằng điện áp trong khoảng 1,25V đến 2,50V và dòng âm được biểu thị bằng 1,25V đến 0V - do đó, dòng chảy vào bể sẽ cho mã ADC từ 512 đến 1023 và chảy ra khỏi cảm ơn sẽ cho mã từ 511 đến 0 (ở định dạng nhị phân thẳng).

Bây giờ điều đó thật bất tiện. Chúng ta phải trừ 512 từ mỗi phép đo trước khi thực hiện bất cứ điều gì với nó, điều này cho các số trong phạm vi -512 đến +511. Điểm của chế độ bổ sung 2 là nó làm điều này cho bạn!

Tuy nhiên, bạn vẫn có thể muốn sử dụng nhị phân thẳng với đầu dò tạo ra kết quả đã ký. Ví dụ: bộ chuyển đổi của bạn có thể có đầu ra khác biệt: Trong trường hợp này, bạn muốn trừ đi đầu ra đảo ngược từ đầu ra không đảo ngược, vì vậy không có lợi thế nào khi sử dụng phép bù 2.


1

Hệ thống bổ sung của hai đang được sử dụng, bởi vì nó bắt nguồn từ cách phần cứng đơn giản hoạt động tự nhiên. Ví dụ, hãy nghĩ rằng đồng hồ đo của bạn, mà bạn đã đặt lại về không. Sau đó đặt bánh răng ngược lại và lái lùi trong 1 dặm (Vui lòng không làm điều này trong thực tế). Đồng hồ đo của bạn (nếu là cơ học) sẽ cuộn từ 0000 đến 9999. Hệ thống bổ sung của hai hoạt động tương tự nhau.

nhập mô tả hình ảnh ở đây


Xin lưu ý rằng tôi không thực sự cung cấp bất kỳ thông tin mới nào ở đây, chỉ là ví dụ về máy đo đường mà ai đó có thể thấy hữu ích - nó giúp tôi hiểu được lý do của hệ thống bổ sung hai khi tôi còn trẻ. Sau đó, thật dễ dàng để tôi chấp nhận một cách trực giác rằng các bộ cộng, phép trừ v.v ... hoạt động tốt với hệ thống bổ sung của hai.

Và vâng, đồng hồ đo của Nissan của tôi hoạt động theo cách này.


Câu trả lời của bạn là về tràn (và tràn), nhưng vì máy đo đường không hiển thị số âm, nên nó không giải quyết bất cứ điều gì liên quan đến hai phần bổ sung ...
marcelm

@marcelm, Trên thực tế, ví dụ đo đường không giải thích bổ sung twos. Chỉ có điều là LOLP đã không đi quá xa với lời giải thích. Nếu một đồng hồ đo sáu chữ số đọc số 0 và bạn lái xe ngược lại trong một dặm, thì bạn sẽ mong đợi nó đọc -1. Thay vào đó, nó đọc 999999. Đó là bởi vì 999999 là đại diện bổ sung sáu chữ số, hàng chục của -1.
Solomon chậm

@jameslarge Không, nó vẫn không. Không có gì trong câu trả lời thực sự chạm vào phần bù của hai. Hoặc bổ sung của một người, hoặc cường độ ký hiệu, hoặc bất kỳ đại diện số đã ký nào.
marcelm

@marcelm Có, đó là: ý tưởng cốt lõi của hệ thống bổ sung của hai: không trừ đi một bằng với số nguyên không dấu đại diện tối đa. Đó là ý tưởng của hệ thống bổ sung của hai. Không có đại diện số đã ký khác cung cấp điều này (theo hiểu biết của tôi). Và ví dụ đo đường cho thấy tính chất hành vi này xuất phát từ sự đơn giản của kỹ thuật; trong trường hợp của máy đo đường: từ kỹ thuật cơ khí. Trong cả thế giới cơ học và điện tử, nó (hệ thống bổ sung của hai) là cách đơn giản nhất để làm cho nó hoạt động.
LOLP

0

Những người khác đã trả lời tại sao twos khen nhị phân thuận tiện cho phần cứng máy tính. Tuy nhiên, dường như bạn đang hỏi tại sao A / D sẽ tạo ra twos lời khen thay vì "nhị phân thẳng" (bất cứ điều gì bạn nghĩ điều đó thực sự có nghĩa).

Hầu hết các A / D đều tạo ra giá trị nhị phân không dấu đơn giản trong khoảng từ 0 đến 2 N -1, trong đó N là số bit mà A / D chuyển đổi thành. Lưu ý rằng điều này cũng có thể được coi là twos ký hiệu khen ngợi, chỉ là các giá trị không bao giờ xảy ra là tiêu cực. Nếu bạn chỉ đang xử lý các số dương, thì hầu hết các biểu diễn nhị phân đều giống nhau. Điều này bao gồm twos khen và ký độ lớn.

Một số A / D, đặc biệt là các A / D được tích hợp trong vi điều khiển, có tùy chọn tạo ra các giá trị âm cho nửa dưới của phạm vi của chúng. Đây có thể là một lợi thế nhận thức khi đo tín hiệu lưỡng cực.

Ít nhất là trong một vi điều khiển, điều này nói chung là ngớ ngẩn. Trong một số trường hợp, bạn có thể sử dụng trực tiếp các giá trị A / D mà không cần chuyển đổi. Trong trường hợp đó, bạn đã chuyển đổi tất cả các giá trị khác sang phạm vi A / D. Hạn chế rằng tất cả các số không âm thực sự đơn giản hóa mọi thứ.

Mặt khác, dù sao bạn cũng sẽ áp dụng một số tỷ lệ và bù cho số đọc A / D để đưa chúng vào bất kỳ đơn vị nào bạn sử dụng cho các giá trị bên trong. Ở đây một lần nữa, không có nhược điểm nào đối với các giá trị không dấu xuất hiện trực tiếp từ A / D. Trong thực tế, tôi thường áp dụng một số bộ lọc thông thấp trên các giá trị thô trước khi chia tỷ lệ và bù. Biết các giá trị đó sẽ không bao giờ âm tính đơn giản hóa các tính toán một chút. Thực hiện chia tỷ lệ trên các giá trị không dấu cũng đôi khi làm cho mọi thứ đơn giản hơn một chút.

Tôi không thể nhớ một trường hợp duy nhất trong hơn 100 dự án vi điều khiển trong đó tôi đã sử dụng A / D ở bất cứ thứ gì ngoại trừ định dạng đầu ra không dấu.

Vì vậy, để trả lời câu hỏi về những lợi thế của A / D khi đưa ra "lời khen twos", có hai câu trả lời:

  1. Tất cả đều làm bất cứ điều gì, chỉ là hầu hết thời gian các giá trị này là không âm, vì vậy bạn không thể nói sự khác biệt giữa lời khen của twos và các ký hiệu khác, như cường độ ký hiệu.

  2. Những lợi thế là rất nhẹ. Bên trong một vi điều khiển về cơ bản chúng không tồn tại.

    Trong phần cứng chuyên dụng, có thể có một số lợi thế để có các giá trị âm biểu thị điện áp đầu vào âm, trong trường hợp đó, twos khen là cách dễ nhất để xử lý phạm vi của các giá trị. Lưu ý rằng nếu dải điện áp đầu vào không đối xứng về 0, thì lợi thế này sẽ biến mất.


-1

"Mã nhị phân thẳng" mà bạn nói đến là gì? Tôi giả sử bạn có nghĩa là có một bit dấu là '1' cho âm và '0' cho dương (hoặc ngược lại ). Điều này có hai nhược điểm hơn so với bổ sung twos chưa được đề cập: một phần lớn không liên quan những ngày này và một quan trọng.

Một phần lớn không liên quan là bạn có thể biểu thị một số ít hơn - tức là 255 số trong 8 bit. Điều này khá không liên quan khi bạn có 32 hoặc 64 bit nhưng quan trọng là khi bạn có ít nhất 4 hoặc 6 bit để làm việc.

Điều quan trọng hơn là hiện tại có hai cách để biểu thị cùng một số - cụ thể là 0 - +0 và -0 nhưng +0 và -0 là cùng một số để việc triển khai của bạn cần đảm bảo rằng bạn không so sánh các số này số mỗi khi bạn thực hiện kiểm tra bình đẳng.


Tôi nghĩ rằng bạn đang đi sai đường ở đây. Bạn đang nói về một đại diện cường độ ký hiệu khi OP đã nói khá rõ ràng về một đại diện nhị phân không dấu.
Joe Hass

1
Nếu bạn đang nói về một đại diện không dấu thì không có lợi thế nào cho phần bù của Two. Nó chỉ đơn giản là lãng phí một chút.
Jack Aidley
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.