c++ - 为什么 int x = 01234 给出 x 的输出值为 668?

标签 c++

<分区>

我最近在针对不同的 x 值测试我的代码时遇到了以下问题。

我将尝试仅说明问题。

#include <iostream>

int main()
{
     int x = 01234;

     std:: cout << x ;

     return 0;
}

输出:

当 x = 1234 , 1234

 x = 01234 , 668

 x = 001234 , 668

 x = 240 , 240

 x = 0240 , 160

 x = 00240 , 160

对于大多数以 0 开头的数字,我会得到不同的值。 例如:x = 0562 给出 370 等等。

我尝试使用各种在线 C++ 编译器,但都提供相同的输出。 我试图用谷歌搜索这个问题,但找不到合适的答案。

最佳答案

看来您遇到了八进制文字问题!任何以 0 开头的数字文字都以 8 为基数进行解释。

01234 = 1 × 8^3 + 2 × 8^2 + 3 × 8^1 + 4 × 8^0  
      = 1 × 512 + 2 × 64 + 3 × 8 + 4 × 1  
      = 512 + 128 + 24 + 4  
      = 668

0240 = 2 × 8^2 + 4 × 8^1 + 0 × 8^0
     = 2 × 64 + 4 × 8 + 0 × 1
     = 128 + 32
     = 160

关于c++ - 为什么 int x = 01234 给出 x 的输出值为 668?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43559454/

相关文章:

c++ - 快速库替换CDC vector 图

c++ - 在 Windows (C++) 的 dirent.h 中找不到 seekdir()

c++ - DirectX 不正确的纹理

c++ - 我可以在 C++ 中使用 ReadDirectoryChangesW() 来观察多个目录的变化吗?

c++ - 基于 downloadmanager 示例,Qt 下载超过 15 个文件不起作用

c++ - ld : duplicate symbol

c++ - GetTokenInformation 与 TokenGroups

c++ - 使用 inflate 解压 png 文件

c++ - 如果 main 中有变量,则段错误(核心已转储)?

C++ 指针 vs std::vector:长变量有什么含义?