JavaScript中的移动位运算

因为技术知识太浅显,一次面试过程中面试官问了我一个这样的问题"1>>2=?"

之前属实一直没有碰到过,回来百度也没有太多东西,后面看高程知道这个叫做有符号右移运算,具体步骤是:

(1)先把1转换成二进制数00000001;

(2)然后右移两位,空位根据前面符号位补齐00000000;

(3)即1>>2结果为0;

如果-1>>2=?,

(1)相同先转换二进制11111111;

(2)步骤二也是相同的,根据符号位补齐右移11111111;

(3)因为是负数,所以二进制负数转换成十进制数结果为10000001,即-1>>2结果还是-1;

那么在说说无符号位右移,即1>>>2=?,对于正数来说,无符号位右移和有符号位右移是一样的,但是对于负数来说,就有所不同了,下面只针对负数说一下无符号位右移:

(1)还是先将十进制转换成为二进制数,即-1=11111111;

(2)然后右移,与有符号位右移不同的是无符号位右移出现的空位不是用符号位补齐而是用0补齐,并且是会按照正数的方式移动不考虑符号位的存在,00111111;

(3)所以通常负数的无符号位右移的结果会非常大。

右移说完了,左移和右移是一样的,位移不同的是不需要考虑符号位,在后面的空位自动补0即可;

因为提到十进制和二进制的转换问题,所以顺便说一下:

十进制转二进制:

正数,直接转化,如 2 = 00000010

负数,则先求出其绝对值的二进制然后在取反码加一即可,如:-2=|-2|+1=11111101+1=11111110;

二进制转十进制:

正数,一样直接转换,如00001000=8;

负数,先减一在求其反码,符号位保持不变即可,如11111001=(-1111000-1)=-0001000,然后正常转换得-8;

时间: 2024-10-10 22:37:40

JavaScript中的移动位运算的相关文章

【转】Cocoa中的位与位运算

转自:http://www.tuicool.com/articles/niEVjy 介绍 位操作是程序设计中对位模式或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算).(摘自wikipedia) OC作为c的扩展和超集,位运算自然使用的是c的操作符.c提供了6个位操作符,$,|,^,~,<<,>>.本文不打算做位运算的基础教学,只介绍一

状压dp中常用的位运算式子

原址:状压dp入门 为了更好的理解状压dp,首先介绍位运算相关的知识. 1.’&’符号,x&y,会将两个十进制数在二进制下进行与运算,然后返回其十进制下的值.例如3(11)&2(10)=2(10). 2.’|’符号,x|y,会将两个十进制数在二进制下进行或运算,然后返回其十进制下的值.例如3(11)|2(10)=3(11). 3.’^’符号,x^y,会将两个十进制数在二进制下进行异或运算,然后返回其十进制下的值.例如3(11)^2(10)=1(01). 4.’<<’符号

状态压缩中常用的位运算(DP)

面对位运算,一直很无感...可能数学太差,脑洞太小. 1.首先是最基本的: 与&,或|,非~,异或^. 2.获取一个或者多个固定位的值: 假设 x = 1010(二进制),我们要取左数第二位的值,可以用(x &(1<<1)); 还可用(x&(3<<2))来取得第三位和第四位. 3.把一个或者多个固定的位上的值清零: 同样 x = 1010(二进制),我们要使左数第二位的值清零,可以用(x^(1<<1)). 待续..

对硬件编程中常用的位运算概述

位运算就是将对应的数值转化为二进制然后按位进行相应的运算.(好吧,这个概念是我自己的理解...) 下面的叙述指示结合个人的经历与理解,肯定是不够全面.甚至不够准确的,只是希望抛砖引玉,同时也作为自己对位运算这一块的一个简单总结. 位运算主要包括:位与(&).位或(|).位取反(~).位异或(^).左移(<<).右移(>>)六种下面分别介绍. 1.  位与(&). 这个和逻辑运算符 与(&&) 是不是长得像?他们的功能也异曲同工!运算的两位同时为1时结

Java 中的按位运算操作

我是木龙小驴,菜鸟一枚,这里发点文字,大家共同学习交流 位运算符无非就是<<  还有 >> 以及>>> 首先很久很久以前,那时候没有操作系统,只有电,计算机运算跟开关点灯差不多,亮代表开,不亮代表关,然后根据电压的高低来进行记录操作. 所以CPU进行所有处理都是二进制的,也就是1 和 0 组成,比如说十进制的1 就是0001 ,2就是0010,3就是0011. 二进制就是逢二进一,当一个数字,或者是字符,或者是什么东西(在计算机运算时都是二进制)如:0010 00

Java中的按位运算

博客大搬家. 生活博客,https://ylxn.wordpress.com 一.位运算符简介: 1.按位与&.如果两个整形数据 a.b 对应位都是1,则结果位才为1,否则为0,(int 最大值0x7fffffff ): 1 int a = 0x7fffffff; 2 int b = 12; 3 int c = 0; 4 int aAndB = a&b; // aAndB is 12 5 int aAndC = a&c; // aAndC is 0 2.按位或|.如果两个操作数都是

VB.NET中怎样实现位运算

这几天一直在边学习边写一个上位机PC应用程序,用来接收串口收到的数据,并已要求的格式实时保存,再将数据以实时曲线的方式绘制出来.下位机是和ADI的ads21469通信,数据时1K Hz/s的采样率,即每秒采1024个点.以整数型式传过来,每个整数32bit表示.由于DSP那边只能是char型发送数据,所以我们把一个整数拆成了4个字节发送.这样就涉及到DSP那边的位移运算.先发高位: int SendData[1024]; int i=0; int tmpSend = 0; int* sendPt

opencv中的按位运算

import numpy as npimport cv2import matplotlib.pyplot as pltdef show(image): plt.imshow(image) plt.axis('off') plt.show()def imread(image): image=cv2.imread(image) image=cv2.cvtColor(image,cv2.COLOR_BGR2RGB) return imagerectangle=np.zeros((300,300,3),

为什么不要在 JavaScript 中使用位操作符?

如果你的第一门编程语言不是 JavaScript,而是 C++ 或 Java,那么一开始你大概会看不惯 JavaScript 的数字类型.在 JavaScript 中的数字类型是不区分什么 Int,Float,Double,Decimal 的.咳咳,我说的当然是在 ES6 之前的 JS,在 ES6 的新标准中提出了像 Int8Array 这样新的数据类型.不过这不是本文叙述的重点,暂且就不谈啦.本文将更着重地谈 JS 的数字类型以及作用于它的位操作符,而关于包装对象 Number 的更多了解可以