JavaScript操作符(一元操作符、位操作符)

JavaScript操作符包括算术操作符、位操作符、关系操作符和相等操作符。只能操作一个值的操作符叫做一元操作符。

递增和递减操作符

递增和递减操作符有两个版本:前置型和后置型。前置型操作符位于要操作的变量之前,后置型操作符位于要操作的变量之后。

需要将一个变量的值在使用前就进行加减操作,一般使用前置操作符。

var age=18;
console.log(++age);//前置型操作符是先计算,返回计算后的值。输出为19
console.log(age);//输出19;
console.log(--age);//输出18
var age1=18;
console.log(age1++);//后置型操作符是在包含该语句执行后,才进行加减操作的,此时age1是18
console.log(age1);//此时age1已经变为19;
console.log(age1--);//此时age1依然是19;

从上面大家应该能看出来前置型操作与后置型操作符的区别。前置型操作符,在使用该变量之前已经进行++或者--操作,而后置型操作符是先使用该变量,然后再进行++或者--操作的。

 一元加减操作符

大多数开发人员对一元加减操作符都不陌生,一元+操作符放在数值前面,对数值不会产生影响。一元减操作符(-)用于表现负数,如-1.

位操作符

位操作符用于在最进本的层次上,即按内存中表示数值的位来操作数值。JavaScript中的所有数值以IEEE-754 64位格式存储,但位操作符并不直接操作64位的值。而是先将64位的值转换为32位的整数,然后执行操作,最后将结果转回64位。

对于有符号的整数,32位中的前31位表示整数的值,最后一位表示数值的符号:0表示整数,1表示负数。表示符号的位叫做符号位,符号位的值决定了数值的格式。其中,整数易二进制格式存储。31位中每一位都表示2的幂,第一位是2^0,第二位是2^1,没用用到的位用0补充,可以忽略。如数值123,二进制表示为00000000000000000000000011110110,也可以表示为11110110。1*2^6+1*2^5+1*2^4+1*2^3+0*2^2+1*2^1+1*2^0.

负数也是以二进制来表示,但是使用的是二进制的补码。计算一个数值的二进制补码需要经过以下步骤:

1.先求这个数值的绝对值的二进制编码;

2.求二进制反码,将二进制码的0替换1,1替换为0

3.将二进制的反码加1.

如-123的二进制编码为:123的二进制编码,0000 0000 0000 0000 0000 0000 1111 0110,反码:1111 1111 1111 1111 1111 1111 0000 1001,加1:1111 11111 11111 11111 11111 0000 1010

按为非(~)

按位非操作符由一个波浪线表示,执行按位非操作符其实就是求这个数值的反码。结果是这个数值的负数减去1.

var num=20;
console.log(~num);//输出-21
var num2=-20;
console.log(~num2);//输出19

按位与(and)

按位与操作符由一个字符&表示,它有两个操作符数。按位与就是将两个数值的每一位对齐。只有两个数值的位都为1的时候返回1.其他返回0.如 12&10,输出结果为8

0000 0000 0000 0000 0000 0000 0001 1000

0000 0000 0000 0000 0000 0000 0001 0100


0000 0000 0000 0000 0000 0000 0001 0000

按位或(or)

按位或操作符由一个(|)表示,也有两个操作数。按位或操作符在有一个为1的 情况下就返回1,只有两个同时为0才返回0.如12|10,输出结果为14.

0000 0000 0000 0000 0000 0000 0001 1000

0000 0000 0000 0000 0000 0000 0001 0100


0000 0000 0000 0000 0000 0000 0001 1100

按位异或(Xor)

按位异或操作符用一个(^)来表示。按位异或操作符在对应的数值上只有一个1时才返回1,若有两个1或者两个0则返回0.如12^10,输出结果为6

0000 0000 0000 0000 0000 0000 0001 1000

0000 0000 0000 0000 0000 0000 0001 0100


0000 0000 0000 0000 0000 0000 0000 1100

左移操作符

左移操作符由两个小于号组成(<<),这个操作符会将数值的所有为向左移动指定的位数。如果将数值2(10)向左移动5位,结果就是64(1000000)。左移后,右侧空出的位置用0补充。

var num=2;
var num1=2<<5;
console.log(num1);//64
console.log(num1.toString(2));//1000000

 右移操作符

右移操作符由两个大于号(>>)组成,有符号右移操作符向右移动,并保留符号位。有符号的右移与左移正好相反,64向右移动5位,值为2.

var num=64;//1000000;
var num1=num>>5;
console.log(num1.toString(2));//10
console.log(num1);//2

 无符号右移操作符由三个大于号(>>>)组成,运算符将 expression1 的位右移 expression2 中指定的位数。  用零填充右移后左边空出的位。  右移的位被丢弃.

var temp
temp = -14 >>> 2

变量 temp 具有初始值 -14(二进制补码 11111111 11111111 11111111 11110010)。  其右移两位后,值等于 1073741820(即二进制的 00111111 11111111 11111111 11111100)。  

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏极客慕白的成长之路

Java的算数运算符、关系运算符、逻辑运算符、位运算符

b=5,a=5 c=-5,a=5 d=3,l=3 f=3,m=4 g=3,n=3 h=6,o=5

20820
来自专栏cloudskyme

Java编程(位运算符)

二进制运算符   由于计算机内部的数据都以二进制的形式存在,所以在Java语言中提供了直接操作二进制的运算符,这就是下面要讲解的位运算符和移位运算符。   使用...

501110
来自专栏deed博客

day02笔记

15320
来自专栏数据结构与算法

归并排序

将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(有序表),这种操作称为归并操作。这样的方法经常用于多个有序的数据文件归并成一个有序的数据文件。...

28760
来自专栏C++

python笔记:#005#算数运算符

18520
来自专栏Java帮帮-微信公众号-技术文章全总结

04-01.总结switch,for,while,do。while跳转语句

1:switch语句(掌握) (1)格式: switch(表达式) { case 值1: 语句体1; break; case 值2: 语句体2; ...

38950
来自专栏黑泽君的专栏

java基础学习_基础语法(上)03_day04总结

============================================================================= ==...

11410
来自专栏黑泽君的专栏

c语言基础学习03_数据类型与运算符

============================================================================= 涉及...

33910
来自专栏jojo的技术小屋

原 NaN和Infinity,null和u

作者:汪娇娇 日期:2016.10.10 看到这个标题,大家对这4个变量应该都不陌生,但若说起他们的差别或者是举个小栗子判断结果,估计就有点晕乎乎的了。 1、N...

34360
来自专栏爱撒谎的男孩

冒泡排序算法

17230

扫码关注云+社区

领取腾讯云代金券