首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

千万别小看这些运算符背后的逻辑

就比如我在js数据类型很简单,却也不简单这一篇笔记中提到的[] == ![]这样一个表达式,它的运算结果是true。如果你不细致地去研究它背后的运算逻辑,你只会惊呼”这是什么鬼“?...相等运算符== 这个运算符的运算规则,在js数据类型很简单,却也不简单这篇笔记中已经简单地解释过了。...位运算符主要分为与&、或|、非~、异或^以及左移>、无符号右移>>>等。 位运算符都是二进制的运算,并且是基于32位整数运算。...移位运算符 在复习到移位运算符这块时,我不由得提出了一个疑问:“javascript中为什么没有无符号左移运算符?”要解答这样一个疑问,首先还是要看看左移和右移分别是怎么运算的。...也就是说,左移也分带符号左移和无符号左移。经测试,javascript中的左移运算符>也能知道,<<是带符号左移)。

72230

Java中的>>,>>>和

前言 我们都知道对于有符号数据类型,二进制最左端的数字为符号位,0代表正,1代表负,这里先介绍几个概念 逻辑左移=算术左移:高位溢出,低位补0 逻辑右移:低位溢出,高位补0 算术右移:低位溢出,高位用符号位的值补...比如一个有符号位的8位二进制数10101010,[]是添加的数字 逻辑左移一位:0101010[0] 逻辑左移两位:101010[00] 算术左移一位:0101010[0] 算术左移两位:101010...[00] 逻辑右移一位:[0]1010101 逻辑右移两位:[00]101010 算术右移一位:[1]1010101 算术右移两位:[11]101010 算术左移和算术右移主要用来进行有符号数的倍增...、减半 逻辑左移和逻辑右移主要用来进行无符号数的倍增、减半 Java中是没有无符号数据类型的,C和C++中有 符号 例子 解释 << num<< n 算术左移 相当于 num*(2的n次方) >

1K30

优雅的使用位运算,省老多事了!!!

今天我们来一篇 JS 中的位运算科普,经常在源码中看到的位运算符,和用其定义的一系列状态到底有什么优势?...位运算符号的基本了解 首先,我们应该要简单了解位运算符,常用的位运算符大概有以下几种,我们可以在JS中使用 toString 将数字转换为二进制查看,也可以通过 0b 开头来手动创建一个二进制数字: (...左移 << 左移会将二进制值的有效位数全部左移指定位数,被移出的高位(最左边的数字)丢弃,但符号会保留,低位(最右边的数字)会自动补0 console.log(1 << 2) // 4 图例如下所示:...console.log(4 >> 2) // 1 参考资料均来自 MDN,除了这些常用的符号之外,文档还标注了所有的JS操作符号,感兴趣的同学可以看一看! 有什么用?...我们以前在做用户标识的时候,通常会定义一个数组来表示,然后执行数组判断来进行权限的判断 const userPerm = ['CREATE', 'UPDATE', 'DELETE', 'SELECT'] // 判断有无权限

8510

JAVA位移运算「建议收藏」

二进制的首位是符号位,0表示正数,1表示负数,在java中,会对负数进行取反加一操作,进而计算出实际的十进制值。...2)正数的左移:如10 00101000,结果是40,实际的意思是,每向左移动一位,就相当于乘以2,即1022=40。...4)负数的左移:负数的左移与正数的左移一致,在右边自动补0。...5)无符号的右移:如-2 >>> 2,对于负数的右移在左边自动补1,但是对于无符号的右移,左边是自动补0,即11111110 – > 00111111,结果为63。...所谓的无符号右移,就是不考虑正数还是负数,左边一律补0。 3、想一想为什么没有无符号左移?个人理解,因为不管正数还是负数,左移都是在右边补0。

56620

JS魔法堂:再识ASCII实体、符号实体和字符实体

本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢。...三、3种实体类型                                        实体分为ASCII实体、字符实体和符号实体。...四、通过outerHTML,innerHTML,innerText,textContent和value操作实体    首先我们需要将3种实体类型分成两类,ASCII实体为一类,字符实体和符号实体为一类。...对于字符实体和符号实体      只能获取对应的字符,无法直接获取实体名和实体编号。 五、总结                                     若有纰漏请大家指正,谢谢。

2.2K80

leetcod刷题(10)——191.位1的个数

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。...提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。...思路: 1.硬解法 由于题目限制了是整数,所以长度永远32位,假设输入为 n,我们可以定义一个值1,将1与n进行&操作,每一次操作完1左移1位,这样就会进位,直到左移到32位为止 2.巧妙解法 我们发现

17310

JAVA中有趣的移位操作

1位 " + (y << 1)); } } /* 输出: 6左移1位 12 6左移2位 24 6左移3位 48 x = 1073741825 x左移1位 = -2147483646...左移1位 -6 */ >> 右移位 在二进制格式下,把所有的数字向右移动指定位数,低位移出(舍弃),高位的空位补符号位,即正数补0,负数补1(想想负数存的补码和原码是不同的)。...1位 2147483646 -3 补码无符号右移2位 1073741823 -3 补码无符号右移3位 536870911 */ <<< 无符号左移 还有这种操作.jpeg 没有这种操作....以int为例,如果直接左移36位,结果并不是0,而是等同于左移36%32=4位。 右移和无符号右移也同样适用。...2,右移相当于除2,不全是 左移操作可能改变正负,因为符号位会被移走,新符号位不一定和以前一样 右移操作不改变符号,因为左边填充的是符号位 无符号右移会把负数变成正数 没有无符号左移 位移超过JAVA基本类型的位数后

1.4K30

plc的移位指令C语言实现,PLC中使用移位指令是如何实现移位动作的

应该是提供图片的下面的那种应用吧, 这种应用的思路其实主要是要记录下到灌装工位时是否有罐子, 程序在图片里面, 假设开机前X1和X2之间没有罐子 开机后传送带运转 当X1检测到应该有罐子的工位来到罐装工位时,首先将检测罐子有无的...M3的数据此次放入M2中,,以次类推,执行SFTR结果为,M3=等于当前X2的状态=0,M2=1,M1=0,M0=0不需要灌装 传送带再次移动,再一次罐子的工位来到灌装工位,X1再次动作,把X2检测罐子有无得数据放入...SAR(shift arithmetic right) 算术右移 格式:SAR OPR,CNT 算术右移SAR把目的操作数的高位向低位移,空出的高位用最高位(符号位)填补。...注:算术移位指令常用于带符号数*2或/2,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。...注:逻辑移位指令常用于无符号数*2或/2,受影响的标志位:CF、OF、PF、SF和ZF(AF无定义)。 循环左移ROL(Rotate Left)和循环右移ROR(Rotate Right)。

1.2K20

探究HashMap源码中最大容量为什么是2的30次方(1<<30)?

这是左移操作符,对二进制进行左移。 右移正好相反,换句话说就是右移缩小两倍,左移扩大两倍 来看1 << 30。它代表将1左移30位,也就是0010…0 int类型是32位整型,占4个字节。...Java的原始类型里没有无符号类型。...-->所以首位是符号位 正数为0,负数为1 java中存放的是补码,1左移31位的为 16进制的0x80000000代表的是-2147483648–>所以最大只能是30 为什么是1<<30 那为什么是...n |= n >>> 1; //将n无符号右移一位再与n做或操作 n |= n >>> 2; //将n无符号右移两位再与n做或操作 n |...= n >>> 4; //将n无符号右移四位再与n做或操作 n |= n >>> 8; //将n无符号右移八位再与n做或操作 n |= n

37820

重学js之JavaScript基本概念(中)- 操作符

左移 左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。...64 注意: 在向左移位后,原数值的右侧多出了 5 个空位,左移操作 会以0来填充这些空位,以便得到的结果是一个完整的32位的二进制数。...有符号的右移 有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号标记),有符号的右移操作与左移操作恰好相反,即如果将64向右移动5位,结果将变回2.如下: var...系列》的第三章第二篇,后续还为大家带来js基础的更多文章。...重学JS系列: 1、重学js之JavaScript简介 2、重学js之在HTML中使用JavaScript 3、重学js之JavaScript基本概念(上)- 数据类型

51130

位1的个数 逻辑位运算符

<< 左移 用来将一个数的各二进制位全部左移N位,右补0。 >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0。...位1的个数 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。...它把无符号的 32 位整数所有数位整体右移。对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。

78430

Kotlin基础学习之位运算

符号数最大值计算完全跟无符号数一样,但是在负数范围内就不能用刚才那种计算方式了,在计算机中,负数除了最高位为1以外,还采用补码的形式,所以在计算中要对补码进行还原 值得注意:的是JAVA的原始类型里没有无符号整型...println(a1 and b1) // 或 println(a1 or b1) // 异或 println(a1 xor b1) // 按位取反 println(a1.inv()) // 左移...如果对应位都是1,则结果为1,否则为0 or 如果对应位都是0,则结果为0,否则为1 xor 如果对应位值相同,则结果为0,否则为1 inv 按位翻转操作数的每一位,即0变成1,1变成0 shl 按位左移指定的位数...类型的数值,无论你执行左移还是右移还是无符号右移,只要移动32位,效果跟没有移动一致。...这个就牵扯到补零扩展和补符号位扩展了 之前我们知道,Java是没有无符号类型的,byte是8个字节而int是32个字节。在byte转int的时候,肯定要将8位补到32位。

1.6K31
领券