JS位操作符
1.按位与 AND &
var result = 25 & 3; alert(result); //1var result2 = 25 & -3;alert(result2); //25
按位与将两个操作数的每一位执行以下真值表:
第一个数值的位 | 第二个数值的位 | 结果 |
1 | 1 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 0 |
25的二进制补码:0001 1001;
3的二进制补码: 0000 0011;
-3的二进制补码:1111 1101
25 & 3 = 0000 0001;//1
25 & -3 = 0001 1001;//25
2.按位或 OR |
alert(25 | 3); //27 alert(25 | -3); //-3
按位或将两个操作数的每一位执行以下真值表:
第一个数值的位 | 第二个数值的位 | 结果 |
1 | 1 | 1 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
25 | 3 = 0001 1011;//27
25 | -3 = 1111 1101;//-3
3.按位异或 XOR ^
alert(25 ^ 3); //26 alert(25 ^ -3); //-28
按位异或将两个操作数的每一位执行以下真值表:
第一个数值的位 | 第二个数值的位 | 结果 |
1 | 1 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
0 | 0 | 0 |
25 ^ 3 = 0001 1010; //26
5 ^-3 = 1110 0100; //-28
4.按位非 NOT ~
alert(~25); //-26 alert(~-25); //24
按位非就是返回数值的反码:
25的二进制补码:0001 1001;
-25的二进制补码:1110 0111
~25 = 1110 0110; //-26
~-25 = 0001 1000; //24
5.左移 <<
左移运算符将数值向左移动,空出来的位置用0填充。左移运算符不会影响操作数的符号位
alert(25 << 2); // 100 alert(-25 << 2); //-100;
25左移两位相当于 25*2*2= 100;
-25左移两位相当于-25*2*2 = -100;
25的二进制补码:0000 0000 0001 1001;
左移两位:0000 0000 0110 0100; // 100
-25的二进制补码:1111 1111 1110 0111;
左移两位:1111 1111 1001 1100; //-100
6.有符号的右移 >>
有符号右移运算符将数值向右移动,但保留符号位的位置,在符号位的右侧出现空位,用符号位的值来填充
alert(25 >> 2); alert(-25 >> 2)
25二进制补码:0001 1001;
有符号右移两位:0000 0110; //6 移出去的 01被舍弃
-25的二进制补码:1110 0111;
有符号右移两位:1111 1001;// -7 移出的 11 被舍弃
7.无符号右移 >>>
无符号右移运算符将数值向右移动,以0填充空位,忽略符号位,符号位跟着一起移动,这样就导致了正数移完之后还是正数,负数移完之后变成了正数。
alert(25 >>> 4); alert(-25 >>> 4);
以4字节表示:
25的二进制补码:0000 0000 0000 0000 0000 0000 0001 1001
无符号右移4位: 0000 0000 0000 0000 0000 0000 0000 0001; //1
-25的二进制补码:1111 1111 1111 1111 1111 1111 1110 0111;
无符号右移4位:0000 1111 1111 1111 1111 1111 1111 1110; //268435454
JS位操作符的更多相关文章
- js中的位运算符 ,按位操作符
按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制.十六进制或八进制数值.例如,十进制数9,用二进制表示则为1001.按 ...
- 浅谈JavaScript位操作符
因为ECMAscript中所有数值都是以IEEE-75464格式存储,所以才会诞生了位操作符的概念. 位操作符作用于最基本的层次上,因为数值按位存储,所以位操作符的作用也就是操作数值的位.不过位操作符 ...
- 为什么不要在 JavaScript 中使用位操作符?
如果你的第一门编程语言不是 JavaScript,而是 C++ 或 Java,那么一开始你大概会看不惯 JavaScript 的数字类型.在 JavaScript 中的数字类型是不区分什么 Int,F ...
- C++位操作符总结
#include <stdio.h> #include <memory.h> #include <malloc.h> #define MaxBinLength 16 ...
- C#位操作符
位操作符是对数据按二进制位进行运算的操作符.c#位操作符包括: 按位与 & 按位或 | 按位取反 ~ 左移 << 右移 >> 例如: 6:00000110 3:00 ...
- ECMAScript位操作符
在ECMAScript中,有少数的几个操作符可以对二进制位进行直接操作,这几个操作符本身直接对二进制进行操作,所有它们的本身是非常效率的,学习这一段有助于以后的优化以及理解. ECMAScript中采 ...
- Java的按位操作符
本文参考:Java的位操作符 Java的位操作符用来操作整数基本数据类型中的单个"比特"(bit),即代进制位.而我们知道比特就是0和1,那么,位操作就是对这些数据进行基本的操作. ...
- 【关于Java移位操作符&按位操作符】
一.java按位运算符(操作符) 这段时间偶尔看一下源码,会发现有很多很基础的java知识在脑海中已经慢慢的淡成不常用记忆,于是打算捡起来一些. 按位运算符是来操作整数基本数据类型中的单个“比特”(b ...
- 原码、反码、补码及位操作符,C语言位操作
计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...
随机推荐
- Android 第三方
把优酷.土豆等取出它们真是的视频播放地址:http://vparser.com/ volley 项目地址 https://github.com/smanikandan14/Volley-demo (1 ...
- c++ map 的使用
1.map是一类关联式容器,它是模板类. 关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在数组中的位置类获取.它的特点是增加和删除节点对迭代器的影响很小,除了操作节点,对其他的节点都没有什 ...
- AspNetPager常用属性及一些样式(本文摘自网络,作者:x123jing)
AlwaysShow 总是显示分页控件,即使要分页的数据只有一页 AlwaysShowFirsLastPageNumbr 是否总是显示第一页和最后一页数字页索引按钮 BackImageUrl 面板的背 ...
- 简单Qt网络通信
最近要用到Qt的Socket部分,网上关于这部分的资料都比较复杂,我在这总结一下,把Socket的主要部分提取出来,实现TCP和UDP的简单通信. 1.UDP通信 UDP没有特定的server端和cl ...
- hdu 3348 coins
这道题算是一道很经典的题,很好的诠释了贪心和动态规划的不同功能.求最少钱的数量用贪心就够了,但是求最多钱的数量要用到动态规划的思想,每步都尽量保留最大 数量.具体看程序注解: #include&quo ...
- WPF 一个数据库连接测试的实现
要实现的功能效果图如下:因为我们要测试数据是从输入框获得的,所以,我们的连接字符串不是写死在应用程序中的.下面我就详细介绍一下.
- 【新产品发布】【EVC8001 磁耦隔离式 USB 转 RS-485】
EVC8001 是 XiaomaGee 团队打造的精品级 USB 转 RS-485 隔离转换器,全部采用最优方案,每个细节均做到最优化.最佳化.亮点举不胜举: ==================== ...
- Android系统目录结构
Android系统编译后生成三个映像文件,都是用cpio打包,gzip压缩的. ramdisk.img 文件系统,包含/system, /data, /bin等目录.kernel启动时负责初始 ...
- JS页面跳转 神器! window.href window.open
window.open 打开页面, 网址为新的网址 window.href 为打开本网址的链接, 为网站URL+传入的URL
- js里面的等于号--
一个是赋值等于号,二个是对比等于号,那么三个等于号是什么用的呢 有时候会看到在判断两个对象是否相等的时候使用了三个等号(===),它和两个等号(==)有什么区别呢?简单来说就是使用“==”时,如果 ...