2015-02-11 128 views
2

用C語言編程時,比如說我有一個整數h作爲十六進制值,整數d作爲十進制數。我可以在h和d之間進行加減運算嗎?還是他們必須在同一個號碼系統?十進制數可以用十進制數加/減嗎?

+0

給它一個鏡頭,看看! http://ideone.com/是一個在線編譯器,您可以在不安裝任何軟件的情況下使用這些測試程序。 – 2015-02-11 02:16:26

+0

我認爲這個問題也混淆了「數字」和「數值」。 0x12,0d18,0o22和0b00010010都是代表相同「值」的「數字」。添加時,您可以添加值 - 不是數字。 – 2015-02-11 02:21:24

+3

您在「數字」和「表示」之間混淆。在內部,電腦有「數字」。外部(你看到並鍵入)有「表示」。十進制是一種表示。十六進制是一種表示。即使是「Q」也是一種表現。如果你輸入一個十六進制表示和一個十進制表示(並以某種方式告訴計算機哪一個),它們都會被內部轉換爲「數字」,您可以添加或減少或不管其他內容,而不用擔心用於輸入數字的表示是十六進制或小數。 – 2015-02-11 02:21:28

回答

7

是的,你可以寫:

int x = 100 - 0x100 + 0100; 

混合了十進制與十六進制和八進制。在計算髮生之前,所有的值都被轉換爲二進制數(編譯器將在本例中進行計算;它不會在運行時計算)。和任何常量可通過已分配適當的值的int值被替換爲:

int d = 100; 
int h = 0x100; 
int o = 0100; 
int x = d + h + o; 
+0

像基地10,16,8三人。 – chux 2015-02-11 02:20:45

+0

爲什麼如果將1加到int'num'的十六進制值爲'0x7fffffff'我得到'-2147483648',如果我將它改爲'long'我得到正確的編號'2147483648''? – Zizoo 2017-05-04 20:57:27

+0

@Zizoo:名義上,這是一個可以單獨提出/回答的新問題。如果你正在使用'sizeof(int)== 4 && sizeof(long)== 8'(例如64位Unix系統;不是Windows 64)的機器,那麼這就是預期的, 或多或少。正式地,當值爲'int'時,將1加到0x7FFFFFFF導致未定義的行爲,因爲它繞過(2^31)-1;通常情況下,它變爲0x80000000,這是最負的32位有符號整數(在2的補碼機器上)的十六進制表示。 _ [... continue ...] _ – 2017-05-04 21:04:59

0

是它們可以,例如

int x; 
x = 0x0F + 10; 
printf("%d\n", x); 

輸出:

25 

表示你使用並不重要,它最終都將轉換爲二進制。

相關問題