前面为 0 的 C++ int 更改整个值

C++ int with preceding 0 changes entire value(前面为 0 的 C++ int 更改整个值)
本文介绍了前面为 0 的 C++ int 更改整个值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个非常奇怪的问题,如果我像这样声明一个 int

I have this very strange problem where if I declare an int like so

int time = 0110;

然后显示到控制台返回的值为72.但是,当我删除前面的 0 以便 int time = 110; 控制台然后像预期的那样显示 110 .

and then display it to the console the value returned is 72. However when I remove the 0 at the front so that int time = 110; the console then displays 110 like expected.

我想知道两件事,首先为什么它在 int 的开头使用前面的 0 来执行此操作,并且有没有办法阻止它,以便 0110 至少等于110?
其次,有没有什么办法可以让0110返回0110?
如果您对变量名称进行猜测,我会尝试在 24 小时内进行操作,但此时 1000 之前的任何时间都会因此导致问题.

Two things I'd like to know, first of all why it does this with a preceding 0 at the start of the int and is there a way to stop it so that 0110 at least equals 110?
Secondly is there any way to keep it so that 0110 returns 0110?
If you take a crack guess at the variable name I'm trying to do operations with 24hr time, but at this point any time before 1000 is causing problems because of this.

提前致谢!

推荐答案

从 0 开始的整数字面量定义了八进制整数字面量.现在在 C++ 中有四类整数文字

An integer literal that starts from 0 defines an octal integer literal. Now in C++ there are four categories of integer literals

integer-literal:
    decimal-literal integer-suffixopt
    octal-literal integer-suffixopt
    hexadecimal-literal integer-suffixopt
    binary-literal integer-suffixopt

八进制整数字面量定义如下

And octal-integer literal is defined the following way

octal-literal:
    0 octal-literal
    opt octal-digit

就是从0开始.

因此这个八进制整数文字

Thus this octal integer literal

0110

对应下面的十进制数

8^2 + 8^1 

即等于 72.

您可以通过运行以下简单程序来确定八进制表示中的 72 等于 110

You can be sure that 72 in octal representation is equivalent to 110 by running the following simple program

#include <iostream>
#include <iomanip>

int main() 
{
    std::cout << std::oct << 72 << std::endl;

    return 0;
}

输出是

110

这篇关于前面为 0 的 C++ int 更改整个值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do compilers treat variable length arrays(编译器如何处理变长数组)
Deduce template argument from std::function call signature(从 std::function 调用签名推导出模板参数)
check if member exists using enable_if(使用 enable_if 检查成员是否存在)
Standard Library Containers with additional optional template parameters?(具有附加可选模板参数的标准库容器?)
Uses of a C++ Arithmetic Promotion Header(C++ 算术提升标头的使用)
Parameter pack must be at the end of the parameter list... When and why?(参数包必须位于参数列表的末尾...何时以及为什么?)