'有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?'

"

C語言允許程序員逐位操作變量,此時,最直觀的數字表示方式自然是二進制。不過這樣常常會讓數字看起來“過長”,例如十進制的 255 使用二進制表示為 11111111,因此,在C語言程序開發中,為了程序員閱讀代碼的方便,需要逐位操作變量時,常常使用十六進制。0xFF 看起來可比 0b11111111 直觀多了。

"

C語言允許程序員逐位操作變量,此時,最直觀的數字表示方式自然是二進制。不過這樣常常會讓數字看起來“過長”,例如十進制的 255 使用二進制表示為 11111111,因此,在C語言程序開發中,為了程序員閱讀代碼的方便,需要逐位操作變量時,常常使用十六進制。0xFF 看起來可比 0b11111111 直觀多了。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,十六進制的數字常常以 0x 或者 0X 前綴開頭,這是印在很多程序員骨子裡的東西。一個有趣的問題是,為什麼十六進制數字以 0x 開頭呢?這樣做有什麼歷史淵源或者特別的好處嗎?

聯想一下:C語言中的八進制是以前綴“0”開頭的,例如 04524 就表示一個八進制數字,它等於十進制的 2388。現在想象一下,怎樣表示十六進制數字呢?能像彙編那樣,在數字尾部添加後綴“h”嗎?例如,80h 表示十六進制的 80(它等於十進制的 128)。

不幸的是,十六進制數字還有 ABCDEF 字符,如果在某段C語言代碼中,出現了字母開頭的數字,例如 F0h,C語言編譯器是將其解釋為變量呢?還是數字呢?因此這樣做並不是一個好的選擇。

"

C語言允許程序員逐位操作變量,此時,最直觀的數字表示方式自然是二進制。不過這樣常常會讓數字看起來“過長”,例如十進制的 255 使用二進制表示為 11111111,因此,在C語言程序開發中,為了程序員閱讀代碼的方便,需要逐位操作變量時,常常使用十六進制。0xFF 看起來可比 0b11111111 直觀多了。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,十六進制的數字常常以 0x 或者 0X 前綴開頭,這是印在很多程序員骨子裡的東西。一個有趣的問題是,為什麼十六進制數字以 0x 開頭呢?這樣做有什麼歷史淵源或者特別的好處嗎?

聯想一下:C語言中的八進制是以前綴“0”開頭的,例如 04524 就表示一個八進制數字,它等於十進制的 2388。現在想象一下,怎樣表示十六進制數字呢?能像彙編那樣,在數字尾部添加後綴“h”嗎?例如,80h 表示十六進制的 80(它等於十進制的 128)。

不幸的是,十六進制數字還有 ABCDEF 字符,如果在某段C語言代碼中,出現了字母開頭的數字,例如 F0h,C語言編譯器是將其解釋為變量呢?還是數字呢?因此這樣做並不是一個好的選擇。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

這樣做並不是一個好的選擇

類似的,還有將 h 放在數字前面,或者 x 放在數字前面表示十六進制,也會帶來同樣的問題。

事實上,早在上世紀 60 年代,最流行的編程數字系統是十進制和八進制,那個時候的機器中每字節的位數是不確定的,有的機器中每字節有 12 位,還有 24 位,36 位的,可以很好地被 3=log2(8)整除。

"

C語言允許程序員逐位操作變量,此時,最直觀的數字表示方式自然是二進制。不過這樣常常會讓數字看起來“過長”,例如十進制的 255 使用二進制表示為 11111111,因此,在C語言程序開發中,為了程序員閱讀代碼的方便,需要逐位操作變量時,常常使用十六進制。0xFF 看起來可比 0b11111111 直觀多了。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,十六進制的數字常常以 0x 或者 0X 前綴開頭,這是印在很多程序員骨子裡的東西。一個有趣的問題是,為什麼十六進制數字以 0x 開頭呢?這樣做有什麼歷史淵源或者特別的好處嗎?

聯想一下:C語言中的八進制是以前綴“0”開頭的,例如 04524 就表示一個八進制數字,它等於十進制的 2388。現在想象一下,怎樣表示十六進制數字呢?能像彙編那樣,在數字尾部添加後綴“h”嗎?例如,80h 表示十六進制的 80(它等於十進制的 128)。

不幸的是,十六進制數字還有 ABCDEF 字符,如果在某段C語言代碼中,出現了字母開頭的數字,例如 F0h,C語言編譯器是將其解釋為變量呢?還是數字呢?因此這樣做並不是一個好的選擇。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

這樣做並不是一個好的選擇

類似的,還有將 h 放在數字前面,或者 x 放在數字前面表示十六進制,也會帶來同樣的問題。

事實上,早在上世紀 60 年代,最流行的編程數字系統是十進制和八進制,那個時候的機器中每字節的位數是不確定的,有的機器中每字節有 12 位,還有 24 位,36 位的,可以很好地被 3=log2(8)整除。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

使用 0 前綴表示八進制數字

BCPL 語言使用符號 8 1234 表示八進制數字,後來 Ken Thompson 根據 BCPL 語言創立了 B 語言,他修改了這一表示方法——使用 0 前綴表示八進制數字,這樣的改進帶來了一系列好處:

  • 對於編譯器來說,整型常量總是可以由單個標記(token)組成。
  • 編譯器仍然可以準確的識別出這是一個數字。
  • 編譯器可以立即識別這是八進制數字。
  • 00005 和 05 是相等的。
  • 不需要使用特殊字符(例如1234表示)。

後來 Thompson 從 B 語言創立C語言時,保留了這一特性。後來發現十六進制數字用起來很方便,選擇了 0x 作為十六進制數字的前綴。

小結

簡單來說,十六進制的前綴 0x 或者 0X 中的 0 是用於告訴編譯器這是一個數字,這有一點點歷史淵源在裡面,也有一些好處。而 x 則可以認為是任意選擇的符號(hexcimal)了。

"

C語言允許程序員逐位操作變量,此時,最直觀的數字表示方式自然是二進制。不過這樣常常會讓數字看起來“過長”,例如十進制的 255 使用二進制表示為 11111111,因此,在C語言程序開發中,為了程序員閱讀代碼的方便,需要逐位操作變量時,常常使用十六進制。0xFF 看起來可比 0b11111111 直觀多了。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,為什麼十六進制的數字前綴用 0x 呢?

在C語言中,十六進制的數字常常以 0x 或者 0X 前綴開頭,這是印在很多程序員骨子裡的東西。一個有趣的問題是,為什麼十六進制數字以 0x 開頭呢?這樣做有什麼歷史淵源或者特別的好處嗎?

聯想一下:C語言中的八進制是以前綴“0”開頭的,例如 04524 就表示一個八進制數字,它等於十進制的 2388。現在想象一下,怎樣表示十六進制數字呢?能像彙編那樣,在數字尾部添加後綴“h”嗎?例如,80h 表示十六進制的 80(它等於十進制的 128)。

不幸的是,十六進制數字還有 ABCDEF 字符,如果在某段C語言代碼中,出現了字母開頭的數字,例如 F0h,C語言編譯器是將其解釋為變量呢?還是數字呢?因此這樣做並不是一個好的選擇。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

這樣做並不是一個好的選擇

類似的,還有將 h 放在數字前面,或者 x 放在數字前面表示十六進制,也會帶來同樣的問題。

事實上,早在上世紀 60 年代,最流行的編程數字系統是十進制和八進制,那個時候的機器中每字節的位數是不確定的,有的機器中每字節有 12 位,還有 24 位,36 位的,可以很好地被 3=log2(8)整除。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

使用 0 前綴表示八進制數字

BCPL 語言使用符號 8 1234 表示八進制數字,後來 Ken Thompson 根據 BCPL 語言創立了 B 語言,他修改了這一表示方法——使用 0 前綴表示八進制數字,這樣的改進帶來了一系列好處:

  • 對於編譯器來說,整型常量總是可以由單個標記(token)組成。
  • 編譯器仍然可以準確的識別出這是一個數字。
  • 編譯器可以立即識別這是八進制數字。
  • 00005 和 05 是相等的。
  • 不需要使用特殊字符(例如1234表示)。

後來 Thompson 從 B 語言創立C語言時,保留了這一特性。後來發現十六進制數字用起來很方便,選擇了 0x 作為十六進制數字的前綴。

小結

簡單來說,十六進制的前綴 0x 或者 0X 中的 0 是用於告訴編譯器這是一個數字,這有一點點歷史淵源在裡面,也有一些好處。而 x 則可以認為是任意選擇的符號(hexcimal)了。

有趣的問題,C語言程序中,為什麼十六進制數字以前綴0x開頭呢?

點個贊再走吧

歡迎在評論區一起討論,質疑。文章都是手打原創,每天最淺顯的介紹C語言、linux等嵌入式開發,喜歡我的文章就關注一波吧,可以看到最新更新和之前的文章哦。

未經許可,禁止轉載。

"

相關推薦

推薦中...