[英]Internal temporal variable in mathematic calculation in C++
以下示例用於說明我的問題:
#include <iostream>
#include <string>
int main()
{
signed char p;
signed char temp=100;
signed char t=4;
p = (temp+temp+temp+temp)/t;
std::cout << "Hello, " << int(p)<< "!\n";
}
在上面的代碼中,變量p
被定義為四個singed char
變量的平均值。 但是,signed char變量(temp + temp + temp + temp)的總和將大於signed char的范圍。 所以我的問題是C ++如何處理這種情況。
但是,signed char變量(temp + temp + temp + temp)的總和將大於signed char的范圍。
這無關緊要,因為integral promotion
會將char
提升為int
。 細節可以在這里找到。 因此,操作將在int
類型上完成,您將獲得預期的結果。
沒有任何事情發生,因為整體推廣
小整數類型(例如char)的Prvalues可以轉換為更大整數類型(例如int)的prvalues。 特別是,算術運算符不接受小於int的類型作為參數,並且在左值到右值轉換后自動應用整數促銷(如果適用)。 此轉換始終保留該值。
(temp+temp+temp+temp)
將返回一個整數。
(temp+temp+temp+temp)/t
將在char范圍內。
所以p == temp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.