【问题标题】:Why is leetcode modulo operator of negative numbers = 0? [duplicate]为什么leetcode的负数模运算符= 0? [复制]
【发布时间】:2021-11-22 06:14:30
【问题描述】:

我正在研究一个关于 c++ leetcode 的练习编码问题,我发现在负数上使用模运算符返回 0,而它不应该返回 0。对于上下文,我正在测试 -4 % 3,它返回0. 有谁知道为什么会这样?

这是我的代码:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> vec {1,2,3};
    int k{4}; 
    std::cout << (-k) % vec.size();

    return 0;
}

打印出来:

0

【问题讨论】:

  • 欢迎来到 Stack Overflow。请将您的实际代码粘贴到问题中,而不仅仅是代码截图,并提供minimal reproducible example
  • -4% 3 返回 -1 应该可以看到here
  • 只发布截图并没有多大帮助。至少提供最少的代码行数,以便其他人可以帮助您
  • 我正在做一个关于 c++ 中 leetcode 的练习编码问题 -- 你应该在你的机器上使用你自己的编译器设置来练习编码,而不是依赖于网站的随机集学习如何编写 C++ 的问题。

标签: c++


【解决方案1】:

这是因为在 C++ 中,当运算符 % 的一个操作数是 unsigned long long 时,其他操作数也会转换为它。

无符号数不能为负数。

所以int -4 被隐式转换为unsigned long long 18446744073709551612 恰好除以 3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多