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

时间:2017-04-22 12:52:37

标签: 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 ++编译器,但都提供相同的输出。 我试图谷歌这个问题,但无法找到合适的答案。

2 个答案:

答案 0 :(得分:3)

看起来你已经被八进制文字击中了!以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 开头的任何数字文字都在基数8中解释。

@Component
@Order(0)
public class PlayingFieldByBeans implements CommandLineRunner { 

    @Override
    public void run(String... arg0) throws Exception {
        List<String> names = new ArrayList<>();
        names.add("Alex");
        names.add("Benedict");
        names.add("Chloe");

        System.out.println("Printing from lazy beans variant: ");
        names.forEach(n -> {
            System.out.println(player(n));
        });

    }

    @Bean
    @Lazy
    public Player player(String name) {
        return new Player(name, shoes());       
    }

    @Bean
    @Lazy
    private Shoes shoes() {
        return new Shoes("Adidas");     
    }   
}

答案 1 :(得分:2)

数字01234在八进制(基数8)中,当您在前面添加0时,将数字定义为八进制。然后,当你以十进制打印它时,得到它的十进制等值