我对这些语言(Java,C …)感到好奇,它们忽略了模运算的数学定义。
在模块操作中返回负值的意义是什么(根据定义,应该始终返回正数)?
我怀疑其余运算符是否故意设计为具有这些语义,我同意这不是很有用。(您是否曾经编写过一个日历程序,以显示时代之前的工作日为星期日,反星期六,反星期五,…,反星期一?)
相反,负余数是定义整数除法的副作用。
A rem B := A - (A div B) * B
如果A div B
定义为trunc(A/B)
,则得到C的%
运算符。如果A div B
定义为floor(A/B)
,则获得Python的%
运算符。其他定义也是可能的。
因此,真正的问题是:
因为这就是C做到这一点的方式。
最初,C没有指定/
应如何处理负数。它留给了硬件。
实际上,每个重要的C实现都使用截断除法,因此在1999年,这些语义被正式纳入C标准。
因为就无符号除法而言,更容易实现(=更便宜)。您只需计算abs(A) div abs(B)
并翻转符号if (A < 0) xor (B < 0)
。
底数除法还有一个步骤:如果余数非零,则从商中减去1。
也许我不是来自这个星球,但在我看来,下面的应该是一个语法错误: 但事实并非如此。当这段代码在Visual Studio上编译时我感到很惊讶,但是我已经学会了就C++规则而言不信任MSVC编译器,所以我检查了标准,它也是标准允许的。如果你不相信我,你可以看8.5.1的语法规则。 为什么允许这样做?这可能是一个愚蠢无用的问题,但我想让你明白我为什么要问。如果这是一个通用语法规则的子例,我会理解的--他
本文向大家介绍JS的语言特性有哪些?相关面试题,主要包含被问及JS的语言特性有哪些?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 运行在客户端浏览器上; 不用预编译,直接解析执行代码; 是弱类型语言,较为灵活; 与操作系统无关,跨平台的语言; 脚本语言、解释性语言
本文向大家介绍Java 语言有哪些特点?相关面试题,主要包含被问及Java 语言有哪些特点?时的应答技巧和注意事项,需要的朋友参考一下 简单易学; 面向对象(封装,继承,多态); 平台无关性( Java 虚拟机实现平台无关性); 可靠性; 安全性; 支持多线程( C++ 语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而 Java 语言却提供了多线程支持); 支持网
问题内容: 这是有效的json吗? http://jsonlint.com/表示同意。 http://www.json.org/没有说什么被禁止。 但这显然没有多大意义,对吗?大多数实现可能使用哈希表,因此无论如何都将其覆盖。 问题答案: JSON校验可以在https://www.jsonformatting.com/
我在系统的分号后面加了一个分号。出来打印ln: 这对Java编译器来说是合法的,所以我检查了其他语句,它们也都是合法的。所以当我搜索并找到这些链接时: > 为什么Java在语句末尾不显示双分号错误? 当我用两个分号结束一行时,编译器并没有抱怨。为什么? 什么时候在方法结束括号后面加上分号? 为什么使用连续分号的代码会编译? “if”语句末尾的分号 我开始明白一个额外的分号意味着一个额外的空语句。
本文向大家介绍Python 没有main函数的原因,包括了Python 没有main函数的原因的使用技巧和注意事项,需要的朋友参考一下 毫无疑问 Python 中没有所谓的 main 入口函数,但是网上经常看到一些文章提“Python 的 main 函数”、“建议写 main 函数”…… 有些人是知情的,他的意图可能是模仿那些正宗的 main 函数,但还有不少人明显是被误导了(或自己误解了),就写