據我所知,C應該將0xfe轉換爲-2,所以返回值應該是ceil(x) - 2 - 但函數似乎並不返回那些值。 int m(double x){return 0xfe + ceil(x)}
應該返回什麼?什麼返回0xfe + ceil(x)返回?
對這個新手問題抱歉。一般來說,我不是C程序員。剛學習十六進制和C.
據我所知,C應該將0xfe轉換爲-2,所以返回值應該是ceil(x) - 2 - 但函數似乎並不返回那些值。 int m(double x){return 0xfe + ceil(x)}
應該返回什麼?什麼返回0xfe + ceil(x)返回?
對這個新手問題抱歉。一般來說,我不是C程序員。剛學習十六進制和C.
0xfe
是不-2
,它是254
。
如果你想-2
,使用「-2
」(或「-0x02
」,如果你真的想使用十六進制)。
如果您將其隱式轉換爲無符號字符,就像上面提到的那樣?有時候會是-2嗎? – ina 2011-05-13 05:31:23
@ina:不;一個'unsigned char'永遠不會是負面的。如果你將它明確地**轉換爲'signed char'(或更好的'int8_t'),它可能*變成'-2',但實際結果是實現定義的。 – 2011-05-13 05:34:27
在C語言中,0xfe
是十六進制的int
文字。具體來說,它等於254
,所以結果是雙精度值ceil(x) + 254.0
。
如果明確轉換爲int8_t
或其他8位有符號的類型,就像這樣:
(int8_t)0xfe
,那麼你可以得到值-2,但這不是由標準的保證。這是因爲0xfe
的值是254,這是不是一個符號的8位字段表示的,所以在標準的第6.3.1.3最後一個規則:
否則,新的類型是有符號和價值不能代表它;結果是實現定義的或實現定義的信號被引發。
如果你想要的值-2
,寫-2
。
像其他答案說,如果你想-2,你應該使用-2。
0xFE有時可能意味着-2,但這完全取決於存儲該值的數據類型。如果只寫入0xFE,它將被解釋爲int,並且表示爲254.如果將其存儲在一個帶符號的字符(一個字節,範圍爲-128到127的8位)中,它應該被解釋爲-2。在c/C++中,這個數據類型被稱爲char,我想C#把它稱爲字節,但我不確定。
最後一句中的「應該」實際上是實現定義的。正確的C代碼不會使用'(signed char)0xfe'。 – 2011-05-13 11:29:35
在C中,0xfe
從來沒有的意思是-2。另一方面,-2可以有時表示0xfe(如果轉換,隱式或顯式地轉換爲unsigned char
)。
對不起,這個愚蠢的問題 - 我不是一個C程序員,只是學習。 – ina 2011-05-13 05:28:19