C++ C++;前面为0的int将更改整个值
我有一个非常奇怪的问题,如果我像这样声明一个intC++ C++;前面为0的int将更改整个值,c++,variables,C++,Variables,我有一个非常奇怪的问题,如果我像这样声明一个int int time = 0110; 然后将其显示到控制台,返回值为72。但是,当我删除前面的0时,使int time=110然后控制台显示预期的110 有两件事我想知道,首先,为什么它在int开头使用前一个0,并且有没有办法阻止它,使0110至少等于110?其次,有没有办法保持它,使0110返回0110? 如果你猜一猜变量名,我试着用24小时的时间进行操作,但是在这一点上,1000之前的任何时间都会因此而导致问题 提前谢谢 开始时为零表示数字为
int time = 0110;
然后将其显示到控制台,返回值为72
。但是,当我删除前面的0时,使int time=110代码>然后控制台显示预期的110
有两件事我想知道,首先,为什么它在int开头使用前一个0,并且有没有办法阻止它,使0110
至少等于110
?
其次,有没有办法保持它,使0110
返回0110
?
如果你猜一猜变量名,我试着用24小时的时间进行操作,但是在这一点上,1000之前的任何时间都会因此而导致问题
提前谢谢 开始时为零表示数字为八进制。没有它是十进制的。编译器将前导零解释为八进制数。“110”的八进制值是十进制的72。如果只是存储一个int值,就不需要前导零
您正试图存储时钟上显示的“时间”。这实际上比一个简单的整数更复杂。你可以存储从午夜开始的分钟数 从0开始的整数文本定义了八进制整数文本。现在C++中有四种整数字类< /p>
integer-literal:
decimal-literal integer-suffixopt
octal-literal integer-suffixopt
hexadecimal-literal integer-suffixopt
binary-literal integer-suffixopt
和八进制整数文本的定义如下
octal-literal:
0 octal-literal
opt octal-digit
就是从0开始
因此,这个八进制整数文本
0110
对应于以下十进制数
8^2 + 8^1
这等于72
通过运行下面的简单程序,您可以确保72 in八进制表示等于110
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::oct << 72 << std::endl;
return 0;
}
这是因为整数文本。将0
放在数字之前意味着它是一个八进制数。对于二进制,它是0b
,对于十六进制,它是0x
或0x
。你不需要为十进制写任何东西。参见下面的代码
#include<stdio.h>
int main()
{
int binary = 0b10;
int octal=010;
int decimal = 10;
int hexa = 0x10;
printf("%d %d %d %d\n", octal, decimal, hexa, binary);
}
#包括
int main()
{
int binary=0b10;
int八进制=010;
整数小数=10;
int hexa=0x10;
printf(“%d%d%d%d\n”,八进制、十进制、十六进制、二进制);
}
有关更多信息,请访问。可能重复的可能重复的可能重复的我如何将其保存为变量?@SteppingHat您可以使用任何整型变量来容纳此值。。变量的值将不取决于在源代码中如何写入整型文字。
#include<stdio.h>
int main()
{
int binary = 0b10;
int octal=010;
int decimal = 10;
int hexa = 0x10;
printf("%d %d %d %d\n", octal, decimal, hexa, binary);
}