首頁  >  文章  >  後端開發  >  為什麼 C/C 中 'long long' 的行為與 'int' 或 'long' 不同?

為什麼 C/C 中 'long long' 的行為與 'int' 或 'long' 不同?

DDD
DDD原創
2024-11-07 17:23:03671瀏覽

Why does 'long long' behave differently than 'int' or 'long' in C/C  ?

理解C/C 中的Long Long

在C 和C 中,「long long」資料型別表示64 位元有符號整數的精度。這使得它能夠表示“int”或“long”等標準整數類型無法容納的極大或極小的數字。

在提供的程式碼片段中,提出了有關「long」行為的幾個問題long' 變數:

  • 'long long' 的大小:為什麼'sizeof(num3)' 會產生0,表示變數未初始化?
  • 整數溢位:為什麼程式碼編譯執行沒有錯誤,當註解行('num3 = 100000000000;')時產生的值遠大於10000000000是未註解?
  • 文字整數常數:為什麼將大於「long」類型限制的整數常數分配給「long」變數會導致編譯錯誤?

「長」的大小long':

「sizeof」運算子傳回變數或資料型別的大小(以位元組為單位)。由於“num3”未使用任何值進行初始化,因此它保持未初始化狀態,且其大小未定義,從而導致 0。若要解決此問題,請使用“long long”值明確初始化“num3”。

整數溢位:

C 以靜默方式處理整數溢位。當分配給變數的值超過其容量時,它會回繞並繼續從最小值開始計數。在這種情況下,將 10000000000 指派給「long」變數會導致溢出,結果為負值。然而,由於 'num2' 是一個 'long long',它可以容納大值而不會溢出。

文字整數常數:

在 C 和 C 中,整數常數是強型態的。分配超出目標資料類型限制的文字整數常數會導致編譯錯誤。在這個例子中,常數 100000000000 超出了 'long' 的範圍,添加 'LL' 明確指定它應該被視為 'long long' 常數。

以上是為什麼 C/C 中 'long long' 的行為與 'int' 或 'long' 不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn