所以我在我的sizeof()书里读了一个关于C++的章节。我所读到的是,如果操作数是一种类型,则只需要括号后的括号,当您有表达式时,您可以跳过括号,所以我做了自己的测试,看看这是怎么回事。我使用了以下代码来查看我将得到什么:
int main(){
cout << sizeof 5 + 5<< endl;
cout << sizeof 10 - 5<< endl;
cout << sizeof 5 * 5<< endl;
cout << sizeof 4.5 + 5.5<< endl;
cout << sizeof 10.5 - 5.5<< endl;
cout << sizeof 2.5 * 5<< endl;
cout << sizeof 10.0 / 5.0<< endl;
cout << endl;
cout << sizeof 5 << endl;
cout << sizeof 5.0 + 5.0 << endl;
cout << sizeof 5.5 << endl;
return 0;
}我得到的输出是:
9
4294967295
20
13.5
2.5
40
1.6
4
13
8这是如何工作的呢?当我有两个整数类型,bot 4字节,当做一个加法时,它是如何变成9字节的?+操作符是一个字节造成的吗?但是,如果是这样的话,那么10-5是如何成为4294的呢?
发布于 2014-03-13 13:43:45
sizeof 5 + 5 --由于运营商的优先级,它被解析为(sizeof(5)) + 5而不是sizeof(5+5),因此它变成了4 + 5和9。有关这方面的更多信息,如克里斯所说,请看一看这张桌子。
对于子字符串,它是相同的,但是由于表达式的类型是size_t,它是无符号的,所以子字符串是在2^32 (即4,294,967,296 )周围环绕的无符号ints上完成的。因此,sizeof 10 - 5是4 - 5,它在32位无符号算术中变成了(4,294,967,296) - 1,这就是你要得到的4,294,967,295。
再进一步
在编译过程的解析步骤内部,每个源代码语句都被转换为表达式树(通常称为天冬氨酸),如果您对这些事情感兴趣,可以以看这儿为例。
要了解更多实际情况,请安装嘎吱声编译器并使用
clang -Xclang -ast-dump -fsyntax-only source.cpp它显示代码中的树。非常好,但是我重新推荐了简短的代码,因为否则输出可能会很大;)
发布于 2014-03-13 13:47:55
它只对它之后的第一件事有约束力。
整数文字是四个字节,而浮点数文字是八个字节。然后,用加法、减法、乘法或除法对这两个值进行跟踪,得到预期的数学结果。例如(5) -> 4,4+5 -> 9。
您的示例中的第二个值是大的,因为有欠流(4294967295 == 0xFFFFFFFF == 4-5在无符号使用中)。
祝好运!
https://stackoverflow.com/questions/22380464
复制相似问题