注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Computer Science

I Pressed My Words Here. Will You Read ?

 
 
 

日志

 
 

《高性能JavaScript》读书笔记8  

2012-09-10 00:48:30|  分类: 读书笔记 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
书名:高性能JavaScript
豆瓣评分:9.0分(457人评价)
博主评价:
未评价很差较差还行推荐力荐
来自豆瓣读书资源

位操作
JavaScript中的数字都依照IEEE-754标准以64位存储。在位操作中,数字被转换为有符号32位格式。每次运算符会直接操作该32位数以得到结果。尽管需要转换,但这个过程与JavaScript其他数学运算和布尔操作相比要快很多。


 Bitwise 按位  两个操作数的对应位
 Bitwise AND 按位 两个操作数的对应位都是1时,则在该位返回1.
 Bitwise OR 按位
 两个操作数的对应位只要一个为1时,则在该位返回1.
 Bitwise XOR 按位异或
 两个操作数的对应位只有一个为1,才在该位返回1.
 Bitwise NOT 按位取反
   操作数的对应位取反(为0则返回1,为1则返回0)
  
对于最后一个取反在这里特别说明下,因为我看了书后糊涂了很久。参考:ECMAScript 位运算符 http://www.w3school.com.cn/js/pro_js_operators_bitwise.asp
25的2进制为:00000000000000000000000000011001.(共32位)
取反得:11111111111111111111111111100110 (這是-26的无符号二进制表示,如果是18取反则为-19.如果250取反则为-251,字面上有规律可循。)
当我们在代码中通过toString(2)获得的值为-11010 (这是-26的有符号二进制表示法(前面的0通常省略),即26的二进制前加负号)看上去差异很大。
但我们可以按照上面所得的规律,来分析无符号二进制与有符号二进制的转换过程:
有符号二进制 转 无符号二进制 -26:
26的二进制:11010    取反得: 11111111111111111111111111100101,即-27。然后,思考,-27 - -26是多少?  1。
故,-27+1= -26,即-26的无符号二进制为:11111111111111111111111111100110(共32位)



位掩码
位掩码是计算机科学中在一种常见的技术,用于处理同时存在多个布尔选项的情形。其思路即使用单个数字的每一位来判定是否选项成立,从而有效地把数字转换为由布尔值标记组成的数组。掩码中每个选项都等于2的幂。(简而言之,二进制中每一位都有两种取值可能:0和1,其正好和布尔值相似,故用于代替存储布尔值。)
例如:
var optionA = 1;
var optionB = 2;
var optionC = 4
var optionD = 8;
var optionE = 16;
通过按位与 & 来验证对应值是否存在。
如:Number(25).toString(2) = 11001;  Number(8).toString(2) = 1000;  Number(6).toString(2) = 110;
 数字二进制
 25 11001(代表true,true,false,false,true ,即,optionE,optionD,optionA存在。)
 8 01000(代表false,true,false,false,false,代表optionD)
 6 00110(代表false,false,true,true,false,代表optionC,optionB)
假设,系统返回25。
通过,
25 & 8 = 8 (二进制表示为1000)
25 & 6 = 0
判断(在if判断中 非0 的数值都为真。)我们便知道:
8代表的optionD存在。
6代表的两项同时不存在(注意这里判断逻辑等同于if(optionCBoolean && optionBBoolean)(这里仅当同为true才通过)。
  评论这张
 
阅读(41)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017