16 但是,如果我调用下面的代码: (('1' - '!') & 70) -6ren">
gpt4 book ai didi

c++ - "Bitwise And"和 C++ 中的左填充

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:16 28 4
gpt4 key购买 nike

我有一个看起来像这样的宏:

Foo(x) ((x - '!') & 070)

如果我调用下面的代码:

Foo('1') => 16

但是,如果我调用下面的代码:

(('1' - '!') & 70) => 0

所以我的问题是,这是怎么回事?为什么 x & 070 计算为 xx & 70 计算为 0?

我的猜测是,左边多出的 0 迫使 60 占用 2 个字节,而不是 1 个字节。这样的话,按位 & 不会如下所示吗?

0000 0000 0001 0000     '16
0000 0000 0100 0110 & '70
-------------------
0000 0000 0000 0000

最佳答案

在 C++ 中,以 0 开头的常量是八进制常量,而不是十进制常量。它仍然是一个整数常量,但 070 == 56

这就是行为差异的原因。

关于c++ - "Bitwise And"和 C++ 中的左填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160483/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com