int main()
{
if (sizeof(int) > -1)
printf("Yes");
else
printf("No");
}
輸出應該是 Yes,但輸出是 No。使用的邏輯是什么?
uj5u.com熱心網友回復:
對于您的問題,您需要了解型別轉換是如何完成的。C 指定:
- 如果任一運算元是 long double 型別,則另一個應轉換為 long double。
- 否則,如果任一運算元為雙精度,則另一個應轉換為雙精度。
- 否則,如果任一運算元為浮點數,則另一個應轉換為浮點數。
- 否則,如果任一運算元是無符號的,則另一個應轉換為無符號。
所以發生的事情是sizeof(int)運算子回傳一個無符號值,該值正在與有符號值進行比較。因此,-1 將轉換為無符號整數,然后回傳答案No。
因此,正如@user3386109 所指出的,您可以在-1 之前添加 (__int128_t)。你也可以寫 (__int128)t省略。
所以你的最終代碼將是:
int main()
{
if (sizeof(int) > (__int128) -1)
printf("Yes");
else
printf("No");
}
這給出了答案yes。
uj5u.com熱心網友回復:
sizeof()回傳 type 的值size_t,它是實作定義的無符號整數型別的別名。
因此,其他項也轉換為無符號型別!
所以-1變成了 SIZE_MAX,因此測驗變成if (sizeof(int) > SIZE_MAX)了你得到的輸出——不是你期望的。
這在有 符號/無符號比較中進一步解釋
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416411.html
標籤:
