[英]How do C/C++ compilers handle type casting between types with different value ranges?
[英]Division between variable of different types | implicit type casting in C++
因為我是 C++ 的菜鳥,所以 Udacity 測驗敘述:
以下程序產生錯誤的輸出。 要修復程序,您需要更改至少兩種變量類型: answer
和一個除數。
#include <iostream>
int main(void)
{
int numerator = 4; // no need to change type
float denominator = 5.0; // changed to float
float answer = 0.0; // changed to float
answer = numerator / denominator;
std::cout<<"answer = "<<answer; // answer = 0.8
return 0;
}
問題:這里的類型轉換是如何暗示的,以及為什么要在相等的兩邊更改變量類型。
為什么不換只answer
。 按照指示,我嘗試將float
設置為僅answer
和denominator
。 現在它可以工作了,但我想學習 C++ 中的隱式類型轉換。
PS:代碼是優達學城的一個小測驗
如果表達式的兩個操作數
numerator / denominator
有整數類型那么表達式的結果也有公共整數。
要使浮點類型的結果之一,操作數必須是浮點類型。
另一方面,如果變量結果具有整數類型,則可能會截斷浮點類型表達式
numerator / denominator
除法發生在分配之前。 兩個整數相除的結果是一個整數。 這就是截斷發生的地方,所以我們知道至少有一個操作數需要浮點數才能保持精度。
然后,如您所知,分配發生了。 整數變量無法保持浮點結果的精度,因此也需要浮點數。
這意味着如果除法的操作數不相同,那么一個將被提升以匹配另一個。 喜歡
int numerator = 4;
float denominator = 5;
關於划分:
numerator / denominator;
numerator
將被提升為浮動。 正如這個答案中所指出的
float / int => float / float = float
int / int = int
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.