首頁>Club>
12
回覆列表
  • 1 # 使用者60724360978

    建議題主先了解一下“位元組序”的概念。然後大概解釋一下:在記憶體中,如果一個數值必須用超過一個位元組的記憶體來儲存它,那麼可能有兩種方式:假設有4位元組變數a = 0x12345678a的記憶體地址是0x100000那麼記憶體中a的儲存方式可能是:

    也可能是第一種被稱為小端(Little-Endian),低為位元組儲存在低地址上,其中在x86平臺上(Intel/AMD CPU)都是這種格式儲存資料;第二種被稱為大端(Big-Endian),又叫網路位元組序,網路傳輸(比如TCP報文頭)都是以這種方式儲存的。需要明確說明的是,二者沒有絕對的好與壞,選擇哪種方式有很多都是歷史原因。看完這個,來切入正題:如果在x86平臺上,c的值等於0x78,又因為0x78儲存在變數a的記憶體空間的低位元組上,所以賦值實際上是取的變數a的第一個位元組(低地址)如果是在大端的硬體上,c的只仍然是0x78,但在大端的硬體上0x78儲存在最後一個位元組裡(高地址)。所以,具體賦值是那邊的,是要看硬體情況的。當然編譯器會根據你選擇的硬體平臺生成正確的程式碼,保證c永遠是變數a數學上的最低8位。但在硬體上,則需要根據實際情況判斷。-----------------------另外,如果是memcpy的這種複製(注意是複製,不是賦值)方式,那麼永遠是以低地址為起點進行復制的。

  • 中秋節和大豐收的關聯?
  • 瓦基弗銀行3:0贏女排歐冠聯賽兩連勝,朱婷僅得10分,如何評價本場比賽?