網上有人說這個問法不嚴謹,我覺得嚴格說確實是這樣,但是我個人覺得不能這樣說!
舉個例子,這個問題就好比你上初中的時候那些證明題很多其實是很不嚴謹的,但是限於知識體系,到高中你會發現好像不是那麼一回事,到了大學你又會發現另外新的東西!但是你能回去說初中老師教的都是錯的嗎?我覺得不能吧!只能說你看待問題的角度以及一個系統的宏觀視角的更深入了,看待問題更明白了!
回到這個問題,一個字等於多少位元組?
首先一個位元組等於八位這是毋庸置疑的,因爲儲存系統邏輯地址的編址便是以位元組爲單位進行編址的,計算機運算二進制這是人所共知的事,也就是8個二進制位等於1個位元組大小。
這裏可能大部分人會回答,一個字等於兩個位元組,你能說這有錯誤嗎?我覺得不能
爲什麼我說不能?
首先我先分析一下說這句話錯誤的原因是什麼?
關鍵字:計算機系統
現在市場上基本上大部分都是intel系列的cpu,intel推出的x86(32位元)架構以及x64(64),這裏談到的64位元和32位元就是64個二進制位和32個二進制位,這個是CPU產商也就是intel等公司生成CPU時決定的,64位元代表他的CPU匯流排以及暫存器的數據寬度,64位元即8個位元組大小,同理32位元也是一樣的道理,
在計算機系統裡,字長是CPU的主要技術指標之一,指的是CPU一次能並行處理的二進制位數,所以這裏這裏的字大小會根據cpu架構的不同而不同,即上述說的32位元和64位元都可以表示位一個字長大小,這表徵的是一個系統,cpu處理數據的能力!
所以,從計算機系統視角來看,等於兩個位元組顯然是錯誤的。
再來分析這句話正確的原因?
關鍵字:計算機語言
c語言
有人可能會很疑惑在widnows下,WORD和DWORD永遠表示2位元組和4位元組大小,這裏我要強調一下,你在進行的是windows程式設計,也就是你一定匯入了Windows.h
標頭檔案,不然你不可能使用上WORD和DWORD的
實際上這裏WORD和DWORD的只是Windows.h標頭檔案裡的使用typedef
一個別名定義,因爲在Windows下很多系統API都是使用這兩個定義的
DWORD真正的原型是unsigned long
,WORD則爲unsigned short
,這裏首先看清了WORD和DWORD的真面目,其次我要強調這個裡的WORD字大小和計算機系統裡的字長大小所表徵的不是同一個東西!
這裏僅僅是微軟自己定義的一個東西而已,你完成可以看到有WORD的地方,直接替換成unsigned short,沒有任何疑問,也不可能有任何錯誤!
這裏順便看一下c語言下幾種數據型別大小
我這是在微軟的msvc編譯環境下展示的大小,即short代表2個位元組,int代表4位元組,long代表4位元組, long long代表8個位元組,不管是32位元還是64位元都是同樣的大小。
然而在gcc編譯後,long型別在32位元環境下爲4位元組大小,在64位元環境下爲8位元組大小。
總結,針對c語言型別,這裏沒有字大小的概念,只有short型別,唯一出現的在微軟的msvc編譯環境下的WORD是微軟自己定義的一個別名,實際爲unsigned short
型別。
彙編語言
這裏可能你就看到很多WORD了
DB 定義位元組變數
DW 定義字變數,2位元組大小
DD 定義4位元組變數
DQ 定義8位元組變數
DT 定義10位元組變數
BYTE(位元組) 1位元組
WORD(字) 2位元組
DWORD(雙字) 4位元組
QWORD(四字)8位元組
TBYTE(十位元組)10位元組
下圖是我在arm指令的書籍上面看到的描述,字數據大小,這裏所謂的字大小就是這本書針對的ARM32位元系統說的,實際上也就是4個位元組大小的數據。
最後總結
關於一個字等於多少位元組這個問題?是需要物件導向回答的,如果對於計算機系統而言,字大小也就是所謂的字長是表徵計算機系統處理問題的能力,通常等於cpu匯流排或者暫存器的寬度,即現代計算的32位元或者64位元;在windows下程式設計,而且使用的微軟的msvc編譯環境,微軟定義的WORD本質爲unsigned short
型別,只是一個別名;如果在彙編語言裏面,一個字大小確實等於2個位元組大小,DW則爲數據定義僞指令,定義爲一個字大小。