`
yiminghe
  • 浏览: 1433254 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

javascript的两整数交换问题

阅读更多

不经意间想起了一道很久前在学校同学间曾经多次讨论的一个程序细节问题,甚至作为评价是否头脑灵活的一种方式:

 

x,y两整数交换值的方法

 

1. 中间变量

最常用的,刚开始学习就被灌输了这个思想:


z=x;

x=y;

y=z;

 

2.c学习时期,又接触了节省空间的做法


x=x+y;

y=x-y;

x=x-y;



3.c时期的终极解法,已然作为一种传奇


x=x^y;

y=x^y;

x=x^y;


4.但是在 javascript中存在最 简洁的两数交换(只在firefox中可用)


[x,y]=[y,x]




ps:占位符,疑惑的规范,尚不明白待细查


尚不太明确规范在何处规定这一行为,摘要一段关于赋值的描述:

 

只在firefox中可用,晕,规范没说


LeftHandSideExpression = AssignmentExpression


1.Let lref be the result of evaluating LeftHandSideExpression.
2.Let rref be the result of evaluating AssignmentExpression.
3.Let rval be GetValue(rref).
4.Throw a SyntaxError exception if the following conditions are all true:
•Type(lref) is Reference is true
•IsStrictReference(lref) is true
•Type(GetBase(lref)) is Enviroment Record
•GetReferencedName(lref) is either "eval" or "arguments"
5.Call PutValue(lref, rval).
6.Return rval.


主要是 GetValue ,PutValue 两个操作不太明白,赋值应该是在 5步 PutValue 中考虑了这种情况:


PutValue(V,W):


1.If Type(V) is not Reference, throw a ReferenceError exception.
2.Let base be the result of calling GetBase(V).
3.If IsUnresolvableReference(V), then
a.If IsStrictReference(V) is true, then
i.Throw ReferenceError exception.
b.Call the [[Put]] internal method of the global object, passing GetReferencedName(V) for the property name, W for the value, and false for the Throw flag.
4.Else if IsPropertyReference(V), then
a.If HasPrimitiveBase(V) is false, then let put be the [[Put]] internal method of base, otherwise let put be the special [[Put]] internal method defined below.
b.Call the put internal method using base as its this value, and passing GetReferencedName(V) for the property name, W for the value, and IsStrictReference(V) for the Throw flag.
5.Else base must be a reference whose base is an environment record. So,
a.Call the SetMutableBinding (10.2.1) concrete method of base, passing GetReferencedName(V), W, and IsStrictReference(V) as arguments.
6.Return.


此时 V是左值引用, V的base是environment record?? W是右值,那么就执行 SetMutableBinding 这个操作,已经看不太明白了。

 

 

分享到:
评论
2 楼 yiminghe 2010-04-15  
atian25 写道

x=x^y;
y=y^x;
x=x^y;

额,笔误笔误
1 楼 atian25 2010-04-15  

x=x^y;
y=y^x;
x=x^y;

相关推荐

    LeetCode:LeetCode上我解决问题之旅的记录

    合并两个排序列表 JavaScript 23 合并k个排序列表 JavaScript 24 成对交换节点 JavaScript 25 k组中的反向节点 JavaScript 26 从排序数组中删除重复项 JavaScript 27 删除元素 JavaScript 28岁 实施...

    javascript入门笔记

    2、如果 a 大于 b的话 ,则交换两个数字的位置 使用 短路&&,扩展赋值运算符,位运算 4、条件运算符(三目运算) 单目(一元)运算符 :++,--,! 双目(二元)运算符 :+,-,*,/,%,>,<, ... ... 三目(三元)运算符 ...

    LeetCode:JavaScript JavaScript对LeetCode的解决方案

    ii二叉搜索树中的搜索中等两数相加字符串转换整数-atoi盛最多水的容器三数之和最接近的三数之和四数之和删除链表的倒数第 n 个节点括号生成两两交换链表中的节点两数相除在排序数组中查找元素的第一个和最后一个位置...

    JavaScript字符串对象substring方法入门实例(用于截取字符串)

    JavaScript substring 方法 substring 方法用于通过指定开始和结束位置来截取字符串并返回截取部分字符串。其语法如下: ...如果 start 比 end 大,那么该方法在截取字符串之前会先交换这两个参数。 substr

    diffieHellman:非常简短的脚本,使用大整数包演示了diffie hellman密钥交换的工作原理

    迪菲·赫尔曼 非常简短的脚本,使用大整数包演示了diffie hellman密钥交换的工作原理 用法: node index.js 当前涉及的数量并不大-需要对原始根模进行更多研究以找到更大的数量以供使用。

    javalruleetcode-leetcode_js:Javascript中的LeetCode解决方案

    问题和面试问题 2 添加两个 Numbers.js 3 无重复 Characters.js 的最长子串 4 两个有序 Arrays.js 的中位数 5 最长回文子字符串.js 8 字符串到整数 (atoi).js 9 回文数.js 10 正则表达式 Matching.js 11 个 Water.js...

    leetcode296-LeetCode.js:使用Javascript的LeetCode解决方案

    第 296 章 使用 ...两个整数相除 30 :fearful_face: 连接所有单词的子串 31 :neutral_face: 下一个排列 32 :fearful_face: 最长有效括号 33 :fearful_face: 在旋转排序数组中搜索 34 :neutral_face: 搜

    leetcodeeasy001-leetcode:我的leetcode的JavaScript&Golang解决方案

    JavaScript&Golang 解决方案。 不 标题 源代码 困难 001 二和 简单的 002 两个数字相加 中等的 003 无重复字符的最长子串 中等的 004 两个有序数组的中位数 难的 005 最长回文子串 中等的 006 之字形转换 中等的 007...

    关于Json数据格式的简单说明

    Json是javascript对象标记,是一种轻量级的数据交换格式。任何支持的类型的都可以通过json表示,如字符串、数字、对象、数组等。 Json格式: 对象表示键值对 数据由逗号分隔 花括号保存对象 方括号保存数组 Json书写...

    leetcode和oj-OJ-Leetcode:跟踪我在LeetCode上的进度的repo

    leetcode 和 oj OJ-Leetcode 一个用于跟踪我在 LeetCode 上的进度的 ...两个整数相除 中等的 33 在旋转排序数组中搜索 中等的 34 查找排序数组中元素的第一个和最后一个位置 中等的 35 搜索插入位置

    redquark:支持使用Gatsby,ReactJS和Node构建的个人网站的代码

    除以两个整数 带有所有单词串联的子字符串 下一个排列 最长有效括号 在旋转排序数组中搜索 在排序数组中查找元素的第一个和最后一个位置 AEM 第00天-AEM开发人员系列 第一天-AEM简介 第2天-AEM构建基

    ES6之 二进制数组

    ES6之 二进制数组 二进制数组(ArrayBuffer对象、 TypedArray 视图和DataView视图)是 JavaScript 操作二进制数据的一个接口。...文本格式传递一个 32 位整数,两端的 JavaScript 脚本与显卡都要进行格式转化,将非常

    阿里 json 和jackson 完整Jar包

    JSON的全称是JavaScript Object Notation,是一种轻量级的数据交换格式。 JSON与 XML具有相同的特性,例如易于人编写和阅读,易于机器生成和解析。但是 JSON比XML数据传输的有效性要高出很多。 JSON完全独立与编程...

    JsonCpp源码

    JSON(JavaScript对象符号)是一种轻量级的数据交换格式。它可以是整数,实数,字符串,值的有序序列,名称/值对的集合。 是一个简单的API来操纵 JSON值,处理序列化和反序列化到字符串。在反序列化/序列化的步骤,...

    正则表达式

    m (多行查找) vaScript动态正则表达式问题 请问正则表达式可以动态生成吗? 例如JavaScript中: var str = "strTemp"; 要生成: var re = /strTemp/; 如果是字符连接: var re = "/" + str + "/"即可 但是要...

    learn-leetcode:leetcode算法学习总结

    350.两个整数的交集 16.最接近的三数之和和 524.通过删除字母匹配到字典里最长单词* 240.搜索二维矩阵II 392.判断子序列 455.分发饼干 125.验证回文串 167.两数之和和输入有序复制 25.合并两个有序时序 283.移动零...

    leetcode算法题主函数如何写-code:leetCodetest(个人算法题解)

    JavaScript算法题(偏困难)纯个人向逻辑思路和对应编码解答(),问题主要来自于,不定期更新。。。 个人收藏和积累,思维逻辑和编码风格(仅供参考)--- 如有摘抄,请注明出处。 我很欢迎别人能在自己拙劣的代码里...

    正则表达式经典实例.pdf

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    正则表达式经典实例

    即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,本书对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括c#、Java、JavaScript、Perl、PHP、Python、Ruby和VB...

    jolly-roger:在React钩子之上的微框架

    我真的不能在组件之间转移状态或交换reducer。 这就是为什么我创建了这个库。 它具有类似的帮助程序,但可以在全球应用程序级别上使用。 共享状态让我们看下面的例子: import react , { useEffect , useState } ...

Global site tag (gtag.js) - Google Analytics