关于 C/C++ R 值表达式的谜题?


下面我们将会看到一个谜题。假设有一个程序如下所示,我们需要说明输出是什么以及原因是什么?

示例

#include<iostream>
using namespace std;
int main() {
   int x = 0xab;
   ~x;
   cout << hex << x;
}

那么输出是什么?~x 执行的取反操作。因此它是否以十六进制形式显示取反结果?

总的来说输出如下

输出

ab

因此,没有发生变化。为什么呢?原因是 ~x 将 x 转换为取反形式,但该值未分配给任何变量。表达式是 R 值表达式。在使用 L 值之前,它不会存储到某些变量中。如果我们放置 L 值,它将如下所示 −

示例

#include<iostream>
using namespace std;
int main() {
   int x = 0xab;
   x = ~x;
   cout << hex << x;
}

输出

ffffff54

更新于: 31-Jul-2019

113 次浏览

事业前程之路

完成本课程并获得证书

开始学习
广告
© . All rights reserved.