【问题标题】:C++11 QtCreator: long integer not correctly read into variableC++11 QtCreator:长整数未正确读入变量
【发布时间】:2016-11-26 15:23:43
【问题描述】:

我有一个 Node 类型的单链表,定义如下:

struct Item {
    long date;
    bool isPaid;
};
struct Node{
    Item item;
    Node* next;
};

其中“日期”是一个采用“ddmmaaaa”形式的字段(即,前两位数字表示日期,后两位数字表示月份,后四位数字表示年份)。 但是,当我尝试添加几个节点时,我插入了一个不同的数字:

newItem=new Node;
newItem->item.date=01062016;
newItem->item.isPaid=true;
newItem->next=nullptr;
list=insertItem(list, newItem);

(insertItem 是我的函数,它接受一个指向列表头的指针和一个指向新节点的指针并将该节点插入到列表中)。

如果我尝试将类似 13042016 的内容分配给长字段,我会得到正确的数字:

但是,当我尝试分配 01062016 时,我得到了 287758:

我不想使用不同的方法(我知道日期很奇怪,我只是需要这种方式)。只是为了理解为什么当我添加一个完全适合长变量的日期时会得到奇怪的数字。 我正在使用基于 Qt 5.1.0 的 Qt Creator 2.7.2。

【问题讨论】:

  • long 用作类型是错误的。如果您知道自己需要 64 位,请使用 qint64int64_t。基本上,如果int 不能削减它,您需要使用给定尺寸的便携式类型。

标签: c++ qt c++11


【解决方案1】:

因为010620160 开头而不是0x 因此它是一个八进制数,它与十进制的287758 等价。

Integral Literal:

octal-literal 是数字零 (0) 后跟零个或多个八进制数字 (0, 1, 2, 3, 4, 5, 6, 7)

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多