JavaScript 温故知新 02

操作符

一元操作符

——递增&递减操作符

 var a = 12; ++a; // a = a + 1, 此刻 a 值为 13

--a; // a = a - 1, 此刻 a 值为 12

 //以上都是语句被求值以前改变——副效应 

前置执行前改变
var b = 12;
b++; // b 本身此刻 还是 12 

var n1 = 3;
var n2 = 4;
var n3 = n1-- + n2; // n3 = 7, 之后, n1 = 2
var n4 = n1 + n2; // n4 = 6 

// 

 递增递减可以应用到其他类型,规则

一元加操作符:

一元减操作符:

主要用于表示负数——

位操作符

——按照内存中表示数值的位来操作数值

——ECMAScript all 数值 IEEE-754    64 位格式存储

——BUT 位操作符 并不直接操作 64 位的值

——先将 64 位的值转换为 32 位整数, then 执行操作, last 将结果重新转换为 64 位

!!!有符号整数:第 32 位 符号:0 正数 1 负数 前 31 位整数值

!!!负数二进制补码 格式存储

——》求补码:1. 取绝对值二进制码   2. 求反码        3. 得到二进制反码 再 加 1

当然此过程是透明的~~~

!!!副效应!!!

——特殊的 NaN 和 Infinity 应用位操作时, both 被当做 0 处理!!!

——按位非(NOT) : ~

—— return 数值 反码

a = -a -1;// 相同结果,BUT ~ 在数值表示的最底层执行操作,速度就会更快!!!

——》按位非操作本质——操作数负值减1

按位与(AND) &

—— 2 个操作数  both 1 return 1 else  return 0

按位或(OR) |

—— 2 个操作数 both 0 return 0 else return 1

按位亦或(XOR) ^

—— 2 个操作数 same return 0 different return 1

左移 <<

—— 将数值所有位向左移动指定位数

左移 << 5  原来数值的右侧多出 5 位空格 以 0 填充

!!!<< 不会影响符号位

有符号右移 >>

——向右移动、保留符号位

符号位填充所有空位

无符号右移 >>>

—— 将所有 32 位 都向右移动

正数同 >> 

负数!!!无符号右移以 0 填充空位

—— 无符号右移操作符 会将负数的二进制码 当成正数的二进制码QAQ

—— cause 负数以其绝对值的二进制补码形式表示, 

—— then 无符号右移后的结果就Max MAX !!!

 

猜你喜欢

转载自www.cnblogs.com/haixiaomei/p/a2.html