文章出處

信息存儲(二):現代計算機存儲和處理都是基于二進制的位,單個的二進制位并不具備含義,但是把它們組合在一起,再加上某種解釋,就可以表示任何有限集合的元素。本章將研究三種最重要的數字表示方法:無符號數、補碼和浮點數。研究這些表示方法是有意義的,能夠理解可以表示的值的范圍和不同的運算屬性,使編寫的程序更加健壯、更加具有移植性。

大多數計算機使用8位的塊,或者字節(byte),作為最小的可尋址的存儲器單位。機器程序將存儲器視為一個非常大的字節數組,其中的每個字節都由一個唯一的數字來標識,成為它的地址。所有可能的地址的集合成為虛擬地址空間。

十六進制表示法

一個字節由8位組成,為了方便表示(二進制太長,十進制不直觀),使用十六進制來表示。

每臺計算機都有一個字長,指明整數和指針數據的標稱大小。也就決定了計算機的虛擬地址空間的最大大小。

數據大小

不同數據類型在32/64位機器上的字節數是不同的:

C類型32位機器64位機器

char11short int22int44long int48long long int88char *48float44double88尋址和字節順序

對于跨字節的程序對象,必須建立兩個規則:這個對象的地址是什么,以及在存儲器中如何排列這些字節。在幾乎所有的機器上,多字節對象都被存儲為連續的字節序列,對象的地址為所使用的字節中最小地址。例如一個類型為int的變量x首地址是0x100,那么代表&x的值為0x100,存儲這個變量的四個字節為0x100,0x101,0x102,0x103。
確定了存儲地址,還需要將字節序列存到這些地址中去。這里有兩種方法:
- 大端法:低有效位存在高位地址;
- 小端法:低有效位存在低位地址;
例如一個int類型的變量,值為0x1234567,位于地址0x100處,那么地址范圍即為0x100~0x103,如果按大端法存儲即為:
01 23 45 67
但是按照小端法存儲,則為:
67 45 23 01
(端的起源了來自于格列佛游記中的剝雞蛋戰爭)

表示字符串

C語言中字符串被編碼為一個以null字符結尾的字符數組。每個字符都由某個標準編碼來表示,最常見的是ASCII字符碼。使用ASCII碼作為字符碼的任何系統上的表示結果都相同,與字節順序和字節大小規則無關。因而,文本數據比二進制數據具有更強的平臺獨立性。

位運算

C語言的一個很有用的特性就是它支持按位布爾運算。布爾代數中的位向量可以很巧妙的表示有限集合,從而實現計算機中位的運算。
位級運算的一個常見用法是實現掩碼運算。這里的掩碼是一個位模式,表示從一個字中選出的位的集合。

邏輯運算

邏輯運算的功能和位運算完全不同:
1. 邏輯運算認為所有非0的參數都表示TRUE,而參數0表示FALSE。
2. 如果對一個參數求值就能確定表達式的結果,那么邏輯運算符就不會對第二個參數求值;

位移運算

算數位移:補最高有效位,常用于補碼,即有符號數的位移;
邏輯位移:補0,常用于無符號數的表示;

看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170126/95758.html

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()