計算機系統第二章 位與整數

2021-10-06 02:44:43 字數 3380 閱讀 2557

一.位

為什麼是二進位制:計算機是由僅具有開關兩個狀態的邏輯電路組成

二進位制的計算模式被十進位制簡單

具有較強抗干擾性

二進位制便於布林代數運算

二進位制:使用乙個選中的數r作為底,並用它的冪作為權,這樣就形成了用r來表示所有數的形式

二進位制就是以2為底,2的冪次來表示的形式

進製轉換:十進位制轉換二進位制

每個數除以二,得餘數倒序

也可以通過2的冪次拼接

十六進製制;從0到f,c語言中,使用0x********來標識十六進製制數

char字元型:1個位元組

short:短整型:2個位元組

int整型:4個位元組

long長整型:4個位元組

long long長長整型:8個位元組

float:單精度浮點型:4個位元組

double:雙精度浮點型:8個位元組

指標:4個位元組:32位

位級操作:

布林代數:與或非

異或:不同為1,相同為0

c語言中有所有位運算操作符:&,|,~,^使用與所有整形資料long int short char unsigned

將引數視為位向量

引數是按位來參與運算

邏輯運算:&&,||,!定義0為假,所有非0值為真,返回值非0即1

移位運算:左移x右移x>>y

將位向量x右移y位,右邊多餘位均捨棄

邏輯右移:左邊以0補齊

算術右移:左側用最高位補齊

左移k位就是乘以2^k

右移k位就是除以2^k,但有可能越界了,就截斷

基於位元組的記憶體模式

:已知一條位址匯流排的位數,如何計算其所能表達的位址空間大小

例如:一條位址匯流排有13根位址線,則它表達的位址空間有2^13

乙個記憶體位址存放的是乙個位元組

位址指明的是某個位元組的存放位置

即某資料第乙個位元組所在的位置

因此連續存放的兩個字之間相差4個位址(32位字長)或者8個位址(64位字長)

位元組的存放順序

乙個多位元組資料怎樣在記憶體中存放的

小端法:低位位元組佔據低位位址

舉例:4位元組變數x的值是0x01234567,

0x100 0x101 0x102 0x103

67 45 23 01

指標表示:類似,比如0xbffff0e8也是用小端法儲存

字串表示:無小端法與大端法區別,因為這是字元陣列,每乙個字元只佔乙個位元組

由字元的陣列表示每乙個字元由ascii碼來表示

字元』0』的ascii碼為0x30,數i的ascii碼為0x30+i

字串必須以乙個空字元表示結尾,也就是說最後乙個字元為0

二.整數

1.有符號數與無符號數

c資料型別 最小值 最大值

char -128 127(因為我們只能用這8位表示正數和負數,所以我們只能用一半的數來表示負數,剩下的一半表示非負數,因為中間有個0,是非負數)

unsigned char 0 255 (因為char只佔乙個位元組,有8位,所以可以表示2^8-1=255)

short -32768 32767

unsigned short 0 65535(2^16-1)

整數的編碼:

無符號數:b2u(x)=

b:binary u:unsigned意思就是二進位制轉換為10進製的unsigned

有符號數就用二進位制補碼來表示:

如果是有符號數轉換為10進製就要加上符號位的負權重

(有符號數)二進位制補碼中,最高位為符號位

0表示非負數,1表示負數

補碼的本質:b2t(x)=

用最高位的負權重將數值往數軸負方向遷移

將無符號數中最高位為1的一半用來表示負數

1000如果是無符號數為+8,如果是有符號數,這就是二進位制補碼,為-8,在取值16的範圍內,+8和-8形成了互補

也就是將無符號數2(w-1)到2w-1這一段範圍來表示負數-2^(w-1)到-1

2(w-1)到2w-1最高位就為1了,用來表示負數

1010原本表示為無符號數就是23+21=10

如果表示為有符號數就是負數,為-23+21=-6

這兩個在16的範圍內就是互補,所以1010就是-6的補碼表示(也就是有符號數)

補碼的取值範圍:也就是有符號數的取值範圍

-2(w-1)到2(w-1)-1

0到2(w-1)-1對應於無符號數的0到2(w-1)-1

-2(w-1)到0對應於無符號數的2(w-1)到2^w-1

當w=16時

無符號數最大值ff ff 也就是11111111 11111111

二進位制補碼也就是有符號數最大值就是01111111 11111111也就是7f ff

|tmin|=tmax+1

umax=2*tmax+1

在c語言中

ulong_max=2^32-1(表示無符號的長整型的最大值)

long_max=2^(32-1)-1

long_min=-2^(32-1)

求補碼的四種方式

對字長為w的負數x求補碼(也就是有符號數的二進位制表示)

-6表示為1010

方法2^w-|x|=a,則a(無符號數)的二進位制表達即為x的w位補碼

-6的原碼為1110,首位符號位不變,餘下三位取反加1得1010

轉換:有符號數與無符號數的表示

有符號數-6變為t2b

t:有符號數 b:binary

就是將有符號數變成補碼表示

然後將補碼表示當做無符號數底權公式展開

有符號數負數部分+2^w就是其對應的無符號數

c語言中的整數:

常數:預設為有符號數

或者使用u作為無符號數的字尾

有符號數和無符號數的轉換與u2t以及t2u完全一樣

特殊情況:如果乙個表示式中既有無符號數,又有有符號數,有符號數直接轉為無符號數

在32位機器中,int有32位

int x=-1 這是有符號數(用二進位制補碼表示),為32個1

轉化為有符號數就是2^32-1=4294967295

unsigned u=2147483648=2^31轉化為二進位制就是1+31個0

轉化為有符號數為-2^31=-2147483648

有符號數小結:

位模式不變,本質是用最高位為1的數去表示有互補關係的負數

重新解釋

當加上或者減去2^w時會有意外情況

表示式中同時存在有符號數和無符號數時,int 預設轉換為unsigned

深入理解計算機系統 第二章

1 什麼是規格化的值?當exp的位模式既不全為0,也不全為1,這種情況下,階碼字段被解釋為以偏置形式表示的有符號整數,也就是說,階碼的值是e e bias,其中e是無符號數,其位表示為,而bias就是乙個等於2k 1 1的 偏置值。2 什麼是非規格化的值?當階碼域全為0時,所表示的就是非規格化的形式...

計算機系統第二章 浮點數

二進位制小數 底權公式 1011.101 8 2 1 0.5 0.125 11.625 竅門 小數部分寫成分數,分母為2 k,k為小數字數,分子為小數部分二進位制的值,即101 5 8 0.625 觀察 小數點右移一位 乘2 小數點左移一位 除2 二進位制小數表示範圍 只能精確表示諸如x 2 k的數...

《深入理解計算機系統》第二章部分習題

人生第一篇博文。深入理解計算機系統 第二章部分習題 2.62 int shifts are arithmetic 對int型別數使用算術右移返回1,否則返回0 顯然,只需考慮負數即可 非負數算術右移與邏輯右移相同 這裡以 1為例,1算術右移一位,所產生的二進位製碼代表的數值不變 而邏輯右移則會使最高...