我对我的程序输出的内容感到困惑:
#include<stdio.h>
int main()
{
if(11==011)
printf("True");
else
printf("False");
}
输出是"False"
。
在 C 中,以 8 开头的数字0
被认为是八进制,即以 8011
为底。实际上也是如此9
。
6.4.4.1
十进制常量以非零数字开头,由一系列十进制数字组成。 八进制常数由前缀 0 组成, 可选地后跟数字 0 到 7 的序列。
以下代码
#include <iostream>
using namespace std;
int main()
{
cout << 11 << endl;
cout << 011 << endl;
return 0;
}
产生输出:
11
9
这是因为在数字前加上 0 会产生八进制数。
所以,
011 (base 8) = 1*8^1 + 1*8^0 = 9 (base 10)
这可以解释为什么您的条件评估为false
.
这是关于数字基础的。在 C++ 中,一些数字基数用唯一前缀表示,以便更舒适地使用(十进制没有),例如十六进制(16)是 0x:0xFACE8D,八进制(8)有 0:011
这篇文章可以帮助你更好地理解它。