1. 程式人生 > >關於有符號位的八位二進位制數如何表示-128的原、反、補碼的問題

關於有符號位的八位二進位制數如何表示-128的原、反、補碼的問題

最近學計算機組成原理,遇到一個問題,用有符號八位二進位制數表示-128。我看到這個題時一臉懵逼,不是八位二進位制數表示的原碼和反碼範圍是-127~128嗎?

首先,網上的網友,同學以及老師給出了兩種說法:

    第一種:-128原碼和反碼不能用八位二進位制表示,原因就是-128超出了範圍(原碼和反碼是有+0和-0之分的);但是補碼的0沒有正負之分,能夠表示的範圍為-128~128。所以-128的補碼錶示為 1000 0000 。

    第二種:同意第一種說法,但是在數學中沒有數字去對應計算機中的-0,所以八位二進位制中表示-128就用-0,也即-128和-0的表示是一樣的。故-128的八位二進位制數表示原碼為 1000 0000 ,反碼錶示為 1111 1111 ,補碼錶示為 1000 0000 。

最後,在與同學和老師討論之後,我覺得第二種說法具有巧合性,不具有規律性,,而第一種說法也更符合教材的內容,範圍就決定了-128不能被有符號的八位二進位制數來表示原碼和反碼。

還請大家多多指教。

相關推薦

關於符號二進位制如何表示-128補碼的問題

最近學計算機組成原理,遇到一個問題,用有符號八位二進位制數表示-128。我看到這個題時一臉懵逼,不是八位二進位制數表示的原碼和反碼範圍是-127~128嗎?首先,網上的網友,同學以及老師給出了兩種說法:    第一種:-128原碼和反碼不能用八位二進位制表示,原因就是-128

c# byte陣列轉換 8符號整數 16符號整數 32符號整數

   byte陣列   byte[] aa = new byte[] { 0xF8, 0x66, 0x55, 0x44 }; 1.轉換成8位有符號整數   sbyte sb = (sbyte)aa[0]; 2.轉換成16位有符號整數 &n

用2個32的整型表示64個埠的點陣圖

#include <stdio.h> #define OFDPA_PBMP_ITER(bm, port) \ int i = 0, p = 0; \ for ((p) = 0, port=1; (p) < 64; (p)++, i=(p)/32, port=p+1

OC符號16進制整形轉10進制整形

       16進位制有符號判斷正負其實是將16進位制轉為2進位制看最高位的值,如果是1則代表是負數,如果是0則代表正數,負數在計算機中是原數的補碼,正數的補碼就是原碼,所以我們判斷最高位是否是1,

12.15一種數叫回文,正讀和讀都一樣,如12321便是一個迴文。編寫一個程式,從命令列得到一個整數,判斷該是不是迴文

有一種數叫回文數,正讀和反讀都一樣,如12321便是一個迴文數。編寫一個程式,從命令列得到一個整數,判斷該數是不是迴文數 package Text6; import java.util.Scanner; public class Zuoyexuanzuo5 { public st

一種數叫回文,正讀和讀都一樣,如12321便是一個迴文。編寫一個程式,從命令列得到一個整數,判斷該是不是迴文

Scanner s = new Scanner(System.in); String t = s.next(); String[] a = new String[t.length()]; // System.out.println(t.length()); // System

2進補碼,2進制加減乘除原理

二進位制用補碼做加減法 1.最高位為符號位,0正1負;加減法都使用補碼形式的加法;正數補碼為原碼本身;負數補碼為其反碼+1;運算結果位數溢位的部分捨棄 8+2=10 000

計算機原理:二進位制 補碼

在計算機中,1byte=8位,若是無符號的情況下可表示的數字總個數為2^8=256個數,但是計算機只會進行加法運算例如: 5-4 =1     在計算機中的運算方式是  5+(-4)=1,故在計算機中要加入負數的概念,以方便加減法運算。 二進位制的字串中區分正負數,做了以

8字節表示符號範圍是-128~127

參與 都是 進行 轉換 取反 符號 按位取反 正整數 為什麽 1 計算機中數值都是按補碼來存儲的。為什麽用補碼,一是符號位參與運算,計算機在進行運算時不需要轉換 二是如果用原碼的話,0就有+0和-0之分,為了統一,規定1000 0000 表示-128 值 原碼 (

彙編實現16符號二進位制排序並輸出

data segment BUF DW 2560,-3,4387,12,6250,-79,54,88 COUNT EQU $-BUF OUTBUF DB 7 DUP(0),'$'data ends code segmentassume cs:code,ds:dataOUTPU

二進位制為什麼表示範圍(-128~~+127)理解

計算機對帶符號數的表示有三種方法:原碼、反碼和補碼。 8位原碼和反碼能夠表示數的範圍是-127~127。 8位補碼能夠表示數的範圍是 -128~127。 範圍是-128~127,那肯定是用補碼錶示的。 10000000-11111111表示-128到-1, 00

C語言符號截斷補問題

在程式設計師面試寶典中看到這樣一道題,下面程式的輸出結果是什麼? 1 #include <stdio.h> 2 3 int main(int argc, char const *argv[]) 4 { 5

# int Convert.Tolnt32(string value) (+ 18過載) 將數字的指定字串表示形式轉換為等效的32符號整數。 異常: ## 標題System.FormatExce

int Convert.Tolnt32(string value) (+ 18過載) 將數字的指定字串表示形式轉換為等效的32位有符號整數。 異常: ## 標題System.FormatExceptionSystem.OverflowException 求解答

[LeetCode] Binary Number with Alternating Bits 交替二進位制

Given a positive integer, check whether it has alternating bits: namely, if two adjacent bits will always have different values. Example 1: Input: 5 O

將十六進制資料轉換成符號十進位制

方法一: #define _READ_HEXADECIMAL_DATA_ #define HEXADECIMAL_ROW_NUM 32 void main() { char tempBuffer1[10]; char tempBuffer2[10]; char tempB

關於OF CF 標誌對於判定兩整數大小關係(無符號符號情況)作用的討論

在x-86 64 IA32 體系下,處理器通過對兩數求差(儲存或不儲存結果)然後讀取被改變的條件碼來判定結果的正負,進而得知兩整數大小關係。其背後的邏輯關係設計非常精妙,然而大部分書籍資料中都只是一筆帶過。在此我做一個較為深入的討論。討論將分為兩個部分,有符號整數和無符號整

leetcode算法題1: 兩個二進制多少不相同?異或位移與運算的主場

output 判斷 ++ 輸入 urn ger ria 結果 ret /* The Hamming distance between two integers is the number of positions at which the corresponding bit

匯編中的符號-無符號-溢出-進

asm什麽是有符號數?什麽是無符號數?什麽是溢出(OF)?什麽是進位(CF)?如何區分有無符號 呢?有符號數,就是帶符號的數,可以是正數或負數。區分正數或負數時,看這個數的最高位是 否為 1,最高位為 1,說明它是負數。最高為 0 說明它是正數。例如一個字節有符號數,表示範圍(-128 ~ 127):A0 :

符號和無符號。——int8疑問有感

表達 意思 無符號 負數 一位 數據 舉例 最大 符號   學習go語言的數據類型,看見int、int8、int16很是疑惑,int8是什麽意思?查詢資料進行綜合解釋大概如下:   Int8是有符號位8位整形(-128到127),隨即產生疑惑,為什麽負數可表示到-128,正

常見的進制轉換與符號表示

hit bubuko 反碼 -- com 十進制 ron 正數 組成 註:本內容參考與傳智播客的Java內容的講解,當然我整理了一下,做個記錄~~~ 其中我認為很有價值的是有符號數據表示法,真正的去深入了解計算機,雖然我是一個渣渣~~~ 所謂進制就是指:就是位進制,是人們規