前面为 0 的 C++ int 会更改整个值
C++ int with preceding 0 changes entire value
我有一个非常奇怪的问题,如果我像这样声明一个 int
int time = 0110;
然后显示到控制台返回的值为72
。但是,当我删除前面的 0 以便 int time = 110;
控制台会按预期显示 110
。
我想知道两件事,首先为什么它在 int 的开头使用前面的 0 来执行此操作,并且有没有办法停止它以便 0110
至少等于 110
?
其次有什么方法可以保留它以便0110
returns 0110
?
如果你对变量名进行猜测,我正在尝试以 24 小时的时间进行操作,但此时 1000 之前的任何时间都会因此而导致问题。
提前致谢!
开头为零表示数字为八进制。没有它是小数。
编译器将前导零解释为八进制数。 “110”的八进制值为十进制的 72。如果您只是存储一个 int 值,则不需要前导零。
您正在尝试存储 "time" 它出现在时钟上的样子。这实际上比简单的 int 更复杂。您可以改为存储自午夜以来的分钟数。
从0开始的整型字面量定义八进制整型字面量。现在在 C++ 中有四类整数文字
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 等于 110
#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::oct << 72 << std::endl;
return 0;
}
输出为
110
这是因为整数文字。在数字前放置 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);
}
有关详细信息,请访问 tutorialspoint。
我有一个非常奇怪的问题,如果我像这样声明一个 int
int time = 0110;
然后显示到控制台返回的值为72
。但是,当我删除前面的 0 以便 int time = 110;
控制台会按预期显示 110
。
我想知道两件事,首先为什么它在 int 的开头使用前面的 0 来执行此操作,并且有没有办法停止它以便 0110
至少等于 110
?
其次有什么方法可以保留它以便0110
returns 0110
?
如果你对变量名进行猜测,我正在尝试以 24 小时的时间进行操作,但此时 1000 之前的任何时间都会因此而导致问题。
提前致谢!
开头为零表示数字为八进制。没有它是小数。
编译器将前导零解释为八进制数。 “110”的八进制值为十进制的 72。如果您只是存储一个 int 值,则不需要前导零。
您正在尝试存储 "time" 它出现在时钟上的样子。这实际上比简单的 int 更复杂。您可以改为存储自午夜以来的分钟数。
从0开始的整型字面量定义八进制整型字面量。现在在 C++ 中有四类整数文字
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 等于 110#include <iostream>
#include <iomanip>
int main()
{
std::cout << std::oct << 72 << std::endl;
return 0;
}
输出为
110
这是因为整数文字。在数字前放置 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);
}
有关详细信息,请访问 tutorialspoint。