首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >-1%7的结果在javascript(-1)和python(6)中不同

-1%7的结果在javascript(-1)和python(6)中不同
EN

Stack Overflow用户
提问于 2016-12-20 09:44:32
回答 4查看 1.3K关注 0票数 14

JavaScript中的表达式-1 % 7给我的结果是-1。而在Python和Haskell中,我发现结果是6

谁能解释为什么两者都有不同的行为?哪一个是正确的?

EN

回答 4

Stack Overflow用户

发布于 2016-12-20 10:37:05

我将给出一个稍微不同的答案。正如其他人所说,函数可以做您定义的任何事情,并且m - x = -x mod m。作为前奏,我会注意到Haskell有两个"mod“函数,modrem,这两个函数在这方面是不同的。你可以证明,从数学上讲,mod更可取。rem one对应于您在x86处理器上获得的内容。事实上,还有第三种,欧几里得的,它可能更好,正如Raymond Boute在The Euclidean Definitions of the Functions Div and Mod中所描述的那样。第三种形式总是返回一个正的模数。(事实上,至少还有两个其他选择可以选择。)

所以,Javascript的定义是你从大多数机器mod操作码中得到的。从这个意义上说,这可能是更可取的,因为这将使其更有效地实现。从数学上讲,Haskell和Python的定义比Javascript的定义更好,还有第三个定义可能更好一些。

欧几里得和Haskell/Python定义都拥有的一个关键属性是x mod m = y mod m等同于Javascript的定义所缺少的x = y mod m。您可以通过在Javascript中计算6 % 7来验证。

票数 8
EN

Stack Overflow用户

发布于 2016-12-20 09:47:27

两者都是正确的。一些语言返回正的模数,而另一些语言则保留符号。

您可以简单地将模加到您的变量中以获得正数,或者在执行模运算之前检查该数是正数还是负数,并在执行模运算后更正结果以在两者之间切换。

用于在两者之间转换a%b的伪代码:

-1%7 == -1语言中,你这样做是为了得到一个正数:

代码语言:javascript
运行
AI代码解释
复制
((a%b)+b) % b

在一种-1%7 == 6语言中,你可以这样做来获得签名版本:

代码语言:javascript
运行
AI代码解释
复制
if a < 0:
  return (a%b)-b
else:
  return a%b
票数 4
EN

Stack Overflow用户

发布于 2016-12-20 09:56:36

两者都是正确的,它们只是在处理负操作数时使用了不同的约定。对于正数,约定是一致的,但对于负数,则不是这样。在Python中,a % b始终与b具有相同的符号。

在下面的内容中,我将使用Python表示法,其中//用于整数除法。

代码语言:javascript
运行
AI代码解释
复制
q, r  = a // b, a % b

然后

代码语言:javascript
运行
AI代码解释
复制
a == q * b + r

在任何语言中,必须为真(假设ab为整数,且b不等于零)。因此,处理余数的方式必须与用于整数除法的约定一致。在Python中,整数除法是底除法,即结果舍入到负无穷大。在其他一些语言中,取而代之的是舍入为零。在某些语言中,您会得到CPU制造商决定实现的任何约定,因此相同的代码在不同的硬件上运行可能会产生不同的结果。正如您可以想象的那样,这可能有点烦人。:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41239190

复制
相关文章
1.javascript中的函数
函数是由这样的方式进行声明的:关键字 function、函数名、一组参数(根据需要使用参数),以及置于括号中的待执行代码(功能),返回值(可选)。
joshua317
2022/03/25
5050
Python中的列表(1)
  所以说访问列表的元素,可以在列表名后加方括号,方括号内输入索引,即可访问对应索引的元素。(ps:索引从0开始)
py3study
2020/01/16
3.4K0
java1-7和1-8的排序代码
String[] atp = {"Rafael Nadal", "Novak Djokovic", "Stanislas Wawrinka", "David Ferrer","Roger Federer", "Andy Murray","Tomas Berdych", "Juan Martin Del Potro"}; List<String> players = Arrays.asList(atp)
tea9
2022/07/16
2020
java1-7和1-8的排序代码
Python中的命名空间和作用域(1)
本文将介绍Python命名空间和作用域,它们用于分配Python程序中的对象。Python语言是一种能够实现面向对象编程的高级语言,或者说,在Python中,“万物皆对象”。
老齐
2020/08/11
9060
CentOS 7 与 CentOS 6的不同
CentOS 7 vs CentOS 6的不同 (1)桌面系统 [CentOS6] GNOME 2.x [CentOS7] GNOME 3.x(GNOME Shell) (2)文件系统 [CentOS6] ext4 [CentOS7] xfs (3)内核版本 [CentOS6] 2.6.x-x [CentOS7] 3.10.x-x (4)启动加载器 [CentOS6] GRUB Legacy (+efibootmgr) [CentOS7] GRUB2 (5)防火墙 [CentOS6] i
Albert陈凯
2018/04/04
1.1K0
数据结构与算法 1-6 Python列表类型不同操作的时间效率
本系列是我在学习《基于Python的数据结构》时候的笔记。本小节首先回顾一下timeit代码执行时间测量模块,然后通过此模块测算Python中list列表一些操作的时间效率。
触摸壹缕阳光
2019/11/13
7660
数据结构与算法 1-6 Python列表类型不同操作的时间效率
枚举+优化(7)——前缀和1
例1  给定一个长度为N的数组:A1,A2,...,AN。(N <= 100000,1 <= A[i] <= 100000)。然后有M个询问,每次询问给两个整数L,R问A[L]~A[R]的和是多少。(M <= 100000)。  这道题最直接的做法就是每次询问的时候,用一个循环累加A[L]~A[R]的和,伪代码如下: Ask(L,R) Sum = 0 For i = L...R Sum += A[i] return Sum  上面这段伪代码,处理一个询问的时间复杂度是O(R-L),考虑到R最大是N
mathor
2018/06/19
5860
《JavaScript 模式》读书笔记(7)— 设计模式1
  这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。
全栈程序员站长
2022/07/21
4510
《JavaScript 模式》读书笔记(7)— 设计模式1
这些模式已经出现了相当长的一段时间,并被证明在许多情况下都非常有用。这也是为什么需要自己熟悉并谈论这些模式的原因。
zaking
2020/09/02
5400
JavaScript基础1
什么是Javascript? Javascript是一种基于对象和事件驱动的, 与平台无关的 ,具有安全性的 ,弱类型的脚本语言。 为什么要用? 使用它的目的是与HTML超文本标记语言、Java 脚本语言(Java小程序)一起实现在一个Web页面中链接多个对象,与Web客户交互作用。从而可以开发客户端的应用程序等。它是通过嵌入或调入在标准的HTML语言中实现的。它的出现弥补了HTML语言的缺陷,它是Java与HTML折衷的选择。 Javascript的特点: 1.是一种脚本编写语言 Ja
汤高
2018/01/11
1K0
JavaScript 学习(1)
参考资料:http://www.w3school.com.cn/js/index.asp
lpe234
2020/07/28
8040
JavaScript笔记(1)
编程:就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果的过程.
y191024
2022/09/20
6170
JavaScript笔记(1)
JavaScript 入门(1)
JavaScript,就是我们通常所说的JS,是一种嵌入到HTML页面中的脚本语言,由浏览器一边解释一边执行。
Qwe7
2022/04/03
3130
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
ECMAScript(通常称为 JavaScript)是一种经历了许多波折的脚本语言。它最初是为了实现 Netscape Navigator(第一批 Web 浏览器之一)的可扩展性而创建的。JavaScript 最初的命名考虑到了与 Java 的关联(Java 那时正迅速发展成为一种重要语言),多年来,它一直被视为两种语言中的次要语言。
疯狂的技术宅
2019/03/28
8930
面向 JavaScript 开发人员的 ECMAScript 6 指南(1 ):新 JavaScript 中的变量声明等功能
JavaScript基础1
JavaScript写在<script></script>之间    <script type="text/javascript">表示在<script></script>之间的是文本类型(text),javascript是为了告诉浏览器里面的文本是属于JavaScript语言。      引用外部javascript文件:<script src="script.js"></script> 变量 var mychar 数组  var array =new Array(); 输出内容:    docume
用户1624346
2018/04/10
7350
JavaScript基础1
JavaScript入门(1)
Hello小可爱们,今天我们又要回到学习主题咯,前面学习了HTML和CSS的用法,今天我们就要为Web页面注入生命啦,那就是JavaScript,通过JavaScript我们可以让我们的页面动起来,这也是Web开发中的一座大山。
萌兔IT
2019/07/26
8360
JavaScript入门(1)
《JavaScript 模式》读书笔记(6)— 代码复用模式1
  我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、 继承有很深入的讲解。我也会尽我所能的为大家讲清楚、分析透彻。
全栈程序员站长
2022/07/21
2650
《JavaScript 模式》读书笔记(6)— 代码复用模式1
GPDB6和GPDB7直连primary命令的不同
最近一直在使用GPDB7的版本进行学习,经常需要客户端psql连接primary进行验证,而连接primary必须使用维护模式时的命令:
yzsDBA
2022/12/27
3420
GPDB6和GPDB7直连primary命令的不同
《JavaScript 模式》读书笔记(6)— 代码复用模式1
  我们有开始进入新篇章了。这篇内容主要讲代码复用模式,实际上代码复用,就是继承啊,原型啊,构造函数啊等等这一类的内容。对于前端进阶来说,是很重要的基础知识。这一篇内容会对原型、 继承有很深入的讲解。我也会尽我所能的为大家讲清楚、分析透彻。
zaking
2020/04/21
4240
《JavaScript 模式》读书笔记(6)— 代码复用模式1
点击加载更多

相似问题

python中的a=[1]和[1]有什么不同?

40

javascript中"1"+"1“& "1”-- "1“的两种不同结果

20

JavaScript和PHP中的RSA-SHA1 1签名不同

17

[1][1]和[1][0]在JavaScript中的结果

26

为什么(([]===[])+/-/)[1] = 'a‘和(1+{})[(1<<1)+1] = 'b’在javascript中?

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文