【问题标题】:Why does this bitwise operation return 30 instead of 384?为什么这个按位运算返回 30 而不是 384?
【发布时间】:2014-08-06 09:18:28
【问题描述】:

我正在使用 Dev-C++ 编译器。这个程序应该打印30,但它的打印是384

#include <stdio.h>

int main() {
    int n = 3;
    int ans;

    ans = n<<3 + n<<1;
    printf("%d", ans);

    getch();
    return 0;
}

【问题讨论】:

  • 有谁知道 Dev-C++ 是否提供纯 C 模式?如果不是,C 标记可能应该更改为 C++。
  • Dev C++ 只是一个围绕旧版本 Mingw/GCC/G++ 的(过时的)IDE。如果我没记错的话,它会根据文件扩展名 .c 或 .cpp 选择语言。
  • @user3745158 请注意int 是有符号类型,对有符号类型执行移位操作没有任何意义。您应该将其切换为 uint32_t 或类似名称。
  • @Lundin 为什么没有意义?只要您知道输出将是什么,这对我来说似乎很好。我会说,对小于 10 的整数执行小于 4 的两次移位是非常没有问题的。

标签: c bitwise-operators dev-c++


【解决方案1】:

问题在于+ 运算符的优先级高于&lt;&lt; 运算符。你写的实际意思是:

ans = n << (3 + n) << 1;

你真正想要的是:

ans = (n<<3) + (n<<1);

【讨论】:

    猜你喜欢
    • 2013-01-21
    • 2014-09-17
    • 2022-06-15
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2023-02-24
    • 2020-11-20
    • 2022-04-28
    相关资源
    最近更新 更多