1. 程式人生 > >原碼、反碼、補碼、有符號數和無符號數運算

原碼、反碼、補碼、有符號數和無符號數運算

  1. 原碼

原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是:

[1111 1111 , 0111 1111]

[-127 , 127]

原碼是人腦最容易理解和計算的表示方式.

  1. 反碼

反碼的表示方法是:

正數的反碼是其本身

負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可見如果一個反碼錶示的是負數, 人腦無法直觀的看出來它的數值. 通常要將其轉換成原碼再計算.

  1. 補碼

補碼的表示方法是:

正數的補碼就是其本身

負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1. (即在反碼的基礎上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]補

[-1] = [10000001]原 = [11111110]反 = [11111111]補

對於負數, 補碼錶示方式也是人腦無法直觀看出其數值的. 通常也需要轉換成原碼在計算其數值.

負數採用補碼編碼:例如char t=-2,
原碼是1010,則反碼是:1101,補碼是:1110,即-2的機器表示為1110;

因為c語言中規定同級別的無符號數的精度高於有符號數,所以會隱式地將:有符號數轉為無符號數(底層位級表示不變,只是解讀方式不同)。

#include<stdio.h>
#include<stdlib.h>
void main()
{
  int a = -3;
  unsigned int b = 2;
  long c = a + b;
  printf("%ld\n",c);
}

A:-1
B:4294967295
C:0x7FFFFFFF
D:0xFFFFFFFF

正確答案為:AB
解析:
無符號和有符號整數進行運算時,有符號整數會被提升為無符號整數。
-3對應的二進位制表示是0xfffffffd,和2相加表示0xffffffff。
輸出結果取決於long是32位,還是64位。這個取決於編譯器和機器。
long是有符號的整型。
如果是32位,0xfffffff在補碼錶示法(最高位是負數位)下是等於-1.
如果是64位,0xfffffff是屬於long的正整數範圍(負數位在第64位),等於4294967295。
(如果你的編譯出來是32位的long,你可以用longlong測試一下就能得到這個數。因為 long long 無論在32位機器或者64位機器都是佔用8個位元組64位)

相關推薦

補碼符號符號運算

原碼 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是:

二進制的補碼及相關計算

pan pre 計算機 php 位運算 log 其他 說明 符號 1.二進制的最高位是符號位,0表示正數,1表示負數2.正數的原碼、反碼、補碼都一樣3.負數的反碼=它原碼符號位不變,其他位取反(0->1,1->0)4.負數的補碼=它的反碼+15.0的反碼、補碼、

補碼

color 保存 eight png logs 按位取反 編碼表 log 轉換成   在計算機中所有的數據的保存均是用二進制來實現的,而二進制的表示則是一串的0,1組成。而在計算機的表達中有著機器數和原碼,反碼,補碼和移碼等數據的編碼表示方法。其中這些編碼的方法稱為碼制。

補碼真值(及(8C5A3E00)16計算)

原碼、反碼、補碼、移碼、真值(及(8c5a3e00)16計算)真值: 符號位 + | X | 一般 0 正 1負 負數: -8 二進制8位表示: 1)真值 X:- 1000 2)原碼:1 0001000 3)反碼:1 1110111(符號位不變,其余位取反) 4)補碼:

補碼之間的關系轉換

span 數值 一個 寄存器 如果 有符號數 pan 關系 style 在計算機中參與運算的數有兩大類:無符號數和有符號數。無符號數,即沒有符號的數,在寄存器中的每一位均可用來存放數值;而有符號數,則需要留出位置來存放符號。以機器字長為8位為例,無符號數表示的範圍是0~25

Java:二進制(補碼)與位運算

無符號 位與 轉換成 轉換 不同 一個 位或 其他 log 一、二進制(原碼、反碼、補碼) 二進制的最高位是符號位(“0”代表正數,“1”代表負數); Java中沒有無符號數; 計算機以整數的補碼進行運算; 1. 原碼:將一個整數轉換成二進制表示 以 int 類型為例

補碼 詳解

blog 應該 符號 order 感覺 最小值 而是 們的 有符號 作者:張子秋出處:http://www.cnblogs.com/zhangziqiu/ 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法

(轉)C語言之補碼

計算機 進制 情況下 class 正數 去掉 都是 OS 原碼 原碼、反碼和補碼 1).數據在內存中存儲的時候都是以二進制的形式存儲的. int num = 10; 原碼、反碼、補碼都是二進制.只不過是二進制的不同的表現形式. 數據是以補碼

補碼表示

height 轉換 img 常見 相互轉換 9.png div 小數 正數 1.原碼、反碼、補碼的定義     對於n+1位機器數,       x, x為正數 x,

運算按位與按位或按位非左移右移補碼

位運算符 位數 是我 計算機 基礎上 個數字 部分 普通 bsp 位運算符的基本規則1,位運算符都是針對整數的二進制數字形式而進行的。2,按位與運算基本規則(規則表):1 & 1 ==> 11 & 0 ==> 00 & 1 ==>

補碼的理解與思考

原碼 反碼 補碼 原碼、反碼、補碼都是二進制表示數的方式 原碼原碼:首位為符號位,0表示整數,1表示負數,其余位表示數值,例如0011表示+3,而1011表示-3。優點:符合人類閱讀習慣,無論正數負數都能馬上讀出來缺點:計算機做運算的時候不會把符號位提取出來,然後單獨計算數值位的,而是把整個數包括

補碼

負數 left 總結 進制 十進制 方法 絕對值 ble code 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其余位表示值。 反碼的表示方法是:正數的反碼是其本身;負數的反碼是在其原碼的基礎上, 符號位不變,其余各個位取反。 補碼的表示方法是:正數的補碼就是

運算符,補碼

數據 還原 .cn 參與 位與 沒有 機器語言 art 電路 按位運算就把數字轉換為機器語言->二進制的數字來運算的一種運算形式。 & 按位與運算符:參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 | 按位或運算符:只要對應的二個二進位有一

補碼

方法 n-1 字長 執行 溢出 註意 就會 減負 原因 數在計算機中是以二進制形式表示的。 數分為有符號數和無符號數。 原碼、反碼、補碼都是有符號定點數的表示方法。 一個有符號定點數的最高位為符號位,0是正,1是副。 以下都以8位整數為例, 原碼就是這個數

補碼,計算機中負數的運算

原碼:把整數換成二進位制,就是原碼。負數的最高位表示符號位為1,正數為0.             eg:單位元組的6原碼為:0000 0110 ; -6的原碼為1000 0110 反碼:正數

補碼總結

正數的原碼,反碼和補碼都一樣,符號位為0;負數的反碼為原碼取反,補碼為反碼+1,符號位為1。負數在計算機中以補碼形式儲存,比如-5就是以(-5)的補碼儲存,-5的值就是5的二進位制碼取反+1。 x&(-x)意思就是x&(x的取反+1),即:保留x的最低位 1 ,

補碼的詳解

原碼 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值. 比如如果是8位二進位制: [+1]原 = 0000 0001 [-1]原 = 1000 0001 第一位是符號位. 因為第一位是符號位, 所以8位二進位制數的取值範圍就是: [1111 1111

補碼的計算

原碼:就是二進位制點表示法,正數最高位是0,負數最高位是1,其餘位表示數值大小 反碼:正數的反碼與原碼相同;負數的反碼符號位不變,其餘位和原碼相反 補碼:正數的補碼和原碼相同;負數的補碼等於其反碼的末尾+1, 在計算機內,所有資料的運算都是採用補碼進行的

補碼之間的轉換

寫在前面:   在日常生活中人們使用的是十進位制。“正如亞里士多德早就指出的那樣,今天十進位制的廣泛採用,只不過是我們絕大多數人生來具有十個手指頭這個解剖學事實的結果。儘管在歷史上手指計數(5,10進位制)的實踐要比二或三進位制計數出現的晚”。而計算機只能識別由0和1組成的二進位制數,其最高位是表示正負的符

補碼數值計算

歡迎訪問我的個人站點,老廖的個人部落格。 前言   計算機的數值編碼和運算應該是本科一年級就會學習的基礎知識。從軟體開發這個角度來說,很多時候這些知識沒有在開發過程中得到有效的利用和實踐。   不巧,最近在做的一個專案,常常需要從補碼的角度考慮數值表示和相關關係。因此,也就趁此機會簡單的寫一寫。 數值表