C Primer Plus學習 五十一 二進位制

2021-07-23 17:57:53 字數 2114 閱讀 4032

•個位元組通常包括8個位。請記住,因為c使用術語位元組(byte)表示用於存放系統字符集的空間大 小,所以乙個c位元組可能為8位、9位、16位或其 他值。然而,描述儲存器晶元和資料傳輸率時使用的位元組指8位位元組。為了使問題簡單,本章假定1個位元組為8位。您將以將這8位從左到右看作是從7到0在位元組中,位7稱為高位(high-order bit),位0稱為低位(low-orderbit)。每位數字是對應2 的個特定的指數。可將位元組設想成如圖15.1所示的形式。

這裡,128是2的7次冪,依此類推。該位元組可以儲存的最大數是把所有的位都設定為1: 11111111 該二進位制數的值如下:

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255

最小的二進位制數是00000000,或乙個簡單的0。乙個位元組可以儲存的數的範圍是0到255,總共256 個可能的值。通過改變對位模式的解釋方式,乙個位元組可以儲存從-128到+127之間的整數,總共還是256 個值。例如,unsigned char通常使用乙個位元組來表示0到255,而signed char通常使用乙個位元組來表示-128 到+127。

有符號整數

有符號數的表示方法是由硬體決定,而不是由c決定的。或許表示有符號數最簡單的方法就是保留1 位(比如髙位)來表示數的符號。在-個1位元組值中,該方法為數字本身留下7位。使用這樣的符號景 (sign-magnitude)表示法,10000001 表示-1, 00000001 表示 1。那麼整個範圍是-127 到+127。

這種方法的乙個缺點是有兩個零:+0和-0。這會引起混淆,而且用兩個位組合來表示乙個值也有些浪費。

二進位制補碼(two』s-complement)方法避免了這種問題,是當今使用最普遍的系統。我們將討論這種方 法應用於1位元組值時的情況。在這種情形下,使用最後7位表示從0到127的值,同時高位設定為0。這部 分與符號量方法相同。同樣地,如果高位是1,那麼該值為負。兩種方法的區別在於確定該負數值的方法。 從個9位組合100000000 ( 256的二進位制形式)中減去乙個負數的位組合,結果是該負數值的數量。例如, 假設乙個負數的位組合為10000000。作為個無符號位元組,該組合為128。作為乙個有符號的值,該組合為 負(位7是1),並且值為100000000-10000000, 即 10000000 (128)因此,該數為-128 (在符號量表示 法中該數為-0)。與之類似,10000001是-127, 11111111是-1。該方法表示數的範圍是-128 到+127。

要對乙個二進位制補碼數取相反數,最簡單的方法是反轉每一位(將0變為1,將1變為0),然後加1。 因為1是ooooooo1,所以-1是11111110+1,即11111111,和前面所看到的是一致的。

二進位制反碼(one』s-complement)方法通過反轉位組合中的每一位以形成乙個數的負數。例如,00000001 是1, 11111110是-1。這種方法也有乙個-0: 11111111。其範圍(對於1位元組值)是-127到+127。

二進位制浮點數

浮點數分兩部分儲存:乙個二進位制小數和乙個二進位制指數。讓我們了解其實現的方法。

一、二進位制小數

普通的小數0.527代表:

5/10 + 2/100 + 7/1000

其中的分母是10的依次遞增的冪。在二進位制小數中,使用2的冪作為分母,因此二進位制小數.101代表:

1/2 + 0/4 + 1/8

用十進位制計數法可表示為:

0.50 + 0.00 + 0.125

也即0.625。

像1/3這樣的許多小數不能用十進位制計數法精確地表示。同樣,許多小數也不能用一•進製計數法精確 地表示。實際上,二進位制計數法只能精確地表示多個丨/2的冪的和。因此3/4和7/8可以精確地表示為二進 制小數,怛是1/3和2/5卻不能。

二浮點數表示法

要在計算機中表示個浮點數,需要留出若t+個位(其位數取決於系統)存放 '個:進製小數,k他 位存放…個指數。總之,數字的實際值是1進製小數部分乘以2的指定次冪。比如用4乘以•個浮點數, 則指數增加了 2,二進位制小數不改變。用個不是2的冪的數乘以乙個浮點數,則會改變二進位制小數,如 果有必要也會改變指數部分。

CUDA學習(五十)

格式說明符 至於標準printf 格式說明符的格式為 flags width precision size type 支援以下字段 有關所有行為的完整說明,請參閱廣泛可用的文件 請注意,cuda的printf 將接受標誌,寬度,精度,大小和型別的任意組合,不管它們是否總體上形成有效的格式說明符。換句...

c primer plus學習筆記

1.變數名命名規則 重要的 1 有含義 2 只能用字母字元 數字和下劃線 3 第乙個字元不能是數字 4 區分大小寫 5 不能用c 關鍵字 2.整型 1 無符合型別不能表負值 2 char short 16 int short long 32,int 和longlong 64,long c 11 寬度...

C PrimerPlus學習筆記

if語句中判斷恒等,將常量放前,防止由於 寫成 造成的難以查詢的bug。if 0 count 若寫成 0 count 會報錯,count 0 則不會命名空間 using namespace std cout one cout two std cout one std cout two using s...