我在测试代码时遇到了各种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 :(得分: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时,将数字定义为八进制。然后,当你以十进制打印它时,得到它的十进制等值