計算機陣列為什麼從0開始而不是從1開始?

時間 2021-06-02 09:20:06

1樓:

因為下標的本質是偏移量啊.,是用來定址的.計算機裡這個手法多如牛毛啊~如果自己連這個都悟不出來,那可能真的不適合吃這碗飯啊

2樓:你的唐長老

從1開始會造成硬體低電位狀態的大量浪費

或者你如果非要用硬體的0表示1,那你就會在任何計算之前都要加一段加法器操作,複雜度太恐怖了。

3樓:顧左右不言他

二進位制的鍋,因為最終數碼訊號與電訊號轉換的時候,大致就是通或者不通,0和1就解決了,多了以後整體的複雜度會高太多,但是這個將來會不會有更迭不好說。

4樓:鳴也

計算機陣列為什麼從0開始而不是從1開始?感覺剛接觸某種語言的時候就會產生疑惑,但一般都不會糾結。

如果索引從 1 開始計,元素 a[1] 是第乙個元素,它的位址就是 base_address,當我們要獲取第 8 個元素 a[8] 的資料時,計算機就要找到元素 a[8] 所在的位址,計算公式就是 base_address + (8-1)* type_size 。

如果索引從 0 開始計,元素 a[0] 是第乙個元素,它的位址就是 base_address,當我們要獲取第 8 個元素 a[7] 的資料時,計算機就要找到元素 a[7] 所在的位址,計算公式就是 base_address + 7 * type_size 。

可以看出來索引從 0 開始,定址時會少做一次減法,這就是乙個優化,若上億次計算,那積累起來的優勢是相當可觀的。

5樓:tulip kung

陣列下標表示的是位址偏移索引,從0開始便於計算,也與底層語義合拍。而程式語言都是從低階發展到高階的,這個習慣也就繼承到了今天。

6樓:桂周星

綜合看了下各位答主的說法,換個角度來回答,這個可能和鋼琴的原理非常像,兩個相鄰的琴鍵是一度關係,而自身是零度關係。

是一種記錄跨度的計數方式。

7樓:Harrytsz

最直接的原因是計算機底層依賴的是二進位制,只有0和1兩種狀態,這導致從0編碼。當然陣列也可以從1開始,只是需要額外的數學處理,無形中增加了很多次計算,增加了 CPU 的負荷。基於以上兩點,最終普遍預設採取從 0 編碼。

8樓:Douglas Zhang

計算機系統角度的答案:

陣列下標本質上就是指示了該陣列元素位址從陣列頭指標開始的偏移量,下標為0代表著偏移量為0,也就是頭指標指向的那個儲存單元,也就是陣列的第乙個元素。索引從0開始乃自然之理。

程式語言角度的答案:

老祖宗們都從0開始,如果從1開始沒有特別的好處,新的語言設計時應當遵循同樣的規範。

9樓:三囧

計算機是二進位制,只有0和1兩個狀態,那麼最直接的最小值自然是全是0,最直接的最大值自然是全是1。

計算機天然是從0開始計數。

也就是「0」。

如果從「1」,也就是0001開始,則需要為這個邏輯做特殊的判斷。並且會浪費掉0000這個位址位。

10樓:wyf

和計算機的定址方式有關係。既然你說了是陣列,呢麼就是C語言的歷史問題。而C語言是從彙編發展來的,所以和彙編有關。誰叫設計CPU的時候,訪問記憶體用的位址加偏移這種方式呢。

11樓:小藍鯨

因為記憶體中給你分配的就是你所需要的首位址這樣陣列直接從0開始,利用基址+比例變址方式很容易去得到想要的值,彙編表達中也很簡便,從一開始完全沒有必要

為什麼C語言的陣列下標從0開始而不是從1開始?

In most programming language,the name of any array is a pointer,which is nothing but a reference to a memory location,and so the expression array n po...

為什麼程式設計裡的排序都是從0開始而不是從1開始

salt 既然問到了就回答一下。因為計算機跟我們的常識不一樣,我們人習慣性從1開始數數,而計算機都是從零開始的,例如陣列的下標是從零開始的,排序用到陣列,你如果從1開始就少排乙個數 corner 首先並不全是,從0開始是方便用位址理解。例如定義乙個int table 5 假設它的首位位址為0x000...

為什麼很多計算機牛人起初都不是學計算機的?

例如很多是主攻數學或物理的 一般分為兩個方向的 起初是主攻數學是走軟體方向。起初是主攻物理是走硬體方向。一般我都建議起初數學不會是物理。這個看個人選擇的 很多人選擇起初計算機 都很難走過真正電腦科學方向。 我想是因為計算機屬於既需要天分,又很依賴興趣驅動的學問。前者決定了你能走多遠,後者決定了你能走...