原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011; -3为1000 0011。 注意,Java中int为32位。...0000 0010 0000 0011 --------- --------- 0000 0011 0000 0001 左移...0001 1000 左移几位则相当于10进制乘以2的多少次方。...>>> 正数无符号右移同右移,负数无符号右移则高位补0. 1>>>2 == 0 13>>>2 ==3 -3>>>2 == 1073741823 0000 0001...<<= 赋值左移
// 将多个连续空格合并成一个空格 function mergeSpace(str) { str=str.replace(/(\s| )+/g,' '); return str; } JS...说明 该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: – _ . ! ~ * ’ ( ) 。...该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?...:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。...因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。
---- 二进制与编码 计算机能识别的只有1和0,也就是二进制,而1和0可以表达出全世界的所有文字和语言符号。 那如何表达文字和符号呢?这就涉及到字符编码了。...>>>:无符号右移运算符。 除~以 外,其余均为二元运算符,操作的数据只能是整型(长短均可)/字符型。...操作规则:把一个数的全部位数都向左移动若干位。...(Integer.toBinaryString(2 << 3)); } 左移用得非常多,也非常好理解。...(注意:没有无符号左移) 注意:并没有<<<这个符号的哟~~~ 正数做>>>运算的时候和>>是一样的。
单目运算符 二进制原码:0000 0000 0000 0000 0000 0000 0000 0101 取反操作后:1111 1111 1111 1111 1111 1111 1111 1010 有符号整数都是用补码来表示....先求反码:1000 0000 0000 0000 0000 0000 0000 0101 2.再求补码:1000 0000 0000 0000 0000 0000 0000 0110 最高位代表符号位...1 表示负数,0 表示正数 ~5 = -6 异或^ 异或运算法则:两位不同,结果为“1”,否则为0 5^1 = 4 左移 左移运算法则:将数值向左移动若干位,用0补足 5<< 1 = 10 右移
= “口”; } }; 再说一下我的思路: 1) 首先我知道,这些表情其实也是一种文字,它可以看做某个UTF-16 的码点.可以参见这个附录: 2) 这些表情的码点在UTF-16中是有自己的范围的.而JS...这里的长度是编码单元长度,以 UTF16/UCS2 为例, 一个编码单元16位、2个字节,在UTF16下英文和中文 都是 U+0000 这样的形式,长度相等.除了部分代理对,它们的长度为2,占用32位、两个编码单元外(有无为
就比如我在js数据类型很简单,却也不简单这一篇笔记中提到的[] == ![]这样一个表达式,它的运算结果是true。如果你不细致地去研究它背后的运算逻辑,你只会惊呼”这是什么鬼“?...相等运算符== 这个运算符的运算规则,在js数据类型很简单,却也不简单这篇笔记中已经简单地解释过了。...位运算符主要分为与&、或|、非~、异或^以及左移>、无符号右移>>>等。 位运算符都是二进制的运算,并且是基于32位整数运算。...移位运算符 在复习到移位运算符这块时,我不由得提出了一个疑问:“javascript中为什么没有无符号左移运算符?”要解答这样一个疑问,首先还是要看看左移和右移分别是怎么运算的。...也就是说,左移也分带符号左移和无符号左移。经测试,javascript中的左移运算符>也能知道,<<是带符号左移)。
前言 我们都知道对于有符号数据类型,二进制最左端的数字为符号位,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次方) >
今天我们来一篇 JS 中的位运算科普,经常在源码中看到的位运算符,和用其定义的一系列状态到底有什么优势?...位运算符号的基本了解 首先,我们应该要简单了解位运算符,常用的位运算符大概有以下几种,我们可以在JS中使用 toString 将数字转换为二进制查看,也可以通过 0b 开头来手动创建一个二进制数字: (...左移 << 左移会将二进制值的有效位数全部左移指定位数,被移出的高位(最左边的数字)丢弃,但符号会保留,低位(最右边的数字)会自动补0 console.log(1 << 2) // 4 图例如下所示:...console.log(4 >> 2) // 1 参考资料均来自 MDN,除了这些常用的符号之外,文档还标注了所有的JS操作符号,感兴趣的同学可以看一看! 有什么用?...我们以前在做用户标识的时候,通常会定义一个数组来表示,然后执行数组判断来进行权限的判断 const userPerm = ['CREATE', 'UPDATE', 'DELETE', 'SELECT'] // 判断有无权限
二进制的首位是符号位,0表示正数,1表示负数,在java中,会对负数进行取反加一操作,进而计算出实际的十进制值。...2)正数的左移:如10 00101000,结果是40,实际的意思是,每向左移动一位,就相当于乘以2,即1022=40。...4)负数的左移:负数的左移与正数的左移一致,在右边自动补0。...5)无符号的右移:如-2 >>> 2,对于负数的右移在左边自动补1,但是对于无符号的右移,左边是自动补0,即11111110 – > 00111111,结果为63。...所谓的无符号右移,就是不考虑正数还是负数,左边一律补0。 3、想一想为什么没有无符号左移?个人理解,因为不管正数还是负数,左移都是在右边补0。
整型转二进制:Integer.toBInaryString(6) <<:左移,3<<2 = 3*2*2 = 12 >>:右移,3>>1 = 3/2 = 1....(有符号的右移,看首位是0还是1,是0则补0,是1则补1;无符号右移就只补0) >>>:无符号右移,3>>>1 = 3/1 = 1....,注意没有无符号左移 &:与运算,6 & 3 = 2(当二进制中两个数的对应位置都为1,结果才为1,例如1010 & 1101 = 1000) |:或运算,6 | 3 = 7(当二进制中两个数的对应位置都为...3 = 5(当二进制中两个数的对应位置都是0或者都是1时,结果才为0,例如10100 & 11010 = 01110) ~:反码,~6 = -7(正数的原码、反码、补码都是它自己,负数的反码是原码的除符号位取反
本文打算对三类HTML实体及JS相关操作作进一步的整理和小结,若有纰漏请大家指正,谢谢。...三、3种实体类型 实体分为ASCII实体、字符实体和符号实体。...四、通过outerHTML,innerHTML,innerText,textContent和value操作实体 首先我们需要将3种实体类型分成两类,ASCII实体为一类,字符实体和符号实体为一类。...对于字符实体和符号实体 只能获取对应的字符,无法直接获取实体名和实体编号。 五、总结 若有纰漏请大家指正,谢谢。
[9d947y2wty.jpeg] JS 里的操作符大家每天都在使用,还有一些 ES2020、ES2021 新加的实用操作符,这些共同构成了 JS 灵活的语法生态。...本文除介绍常用的操作符之外,还会介绍 JS 里一些不常用但是很强大的操作符,下面我们一起来看看吧~ 1....位运算符 >> 与 >>> 有符号右移操作符 >> 将第一个操作数向右移动指定的位数,多余的位移到右边被丢弃,高位补其符号位,正数补 0,负数则补 1。...<<<1).toString(2) // "-1000" PS:JS 里面没有无符号左移,而且其他语言比如 JAVA 也没有无符号左移。...>>=、无符号按位右移赋值 >>>=、逻辑空赋值 ??
JavaScript正则表达式中元字符的使用 需要使用转移符号,可以方便使用,可以认为是对方括号使用的简化: 元字符: 元字符 描述 . 查找单个字符,除了换行和行结束符。 \w 查找单词字符。
编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为汉明重量)。...提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。...思路: 1.硬解法 由于题目限制了是整数,所以长度永远32位,假设输入为 n,我们可以定义一个值1,将1与n进行&操作,每一次操作完1左移1位,这样就会进位,直到左移到32位为止 2.巧妙解法 我们发现
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基本类型的位数后
应该是提供图片的下面的那种应用吧, 这种应用的思路其实主要是要记录下到灌装工位时是否有罐子, 程序在图片里面, 假设开机前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 << 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
左移 左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。...64 注意: 在向左移位后,原数值的右侧多出了 5 个空位,左移操作 会以0来填充这些空位,以便得到的结果是一个完整的32位的二进制数。...有符号的右移 有符号的右移操作符由两个大于号(>>)表示,这个操作符会将数值向右移动,但保留符号位(即正负号标记),有符号的右移操作与左移操作恰好相反,即如果将64向右移动5位,结果将变回2.如下: var...系列》的第三章第二篇,后续还为大家带来js基础的更多文章。...重学JS系列: 1、重学js之JavaScript简介 2、重学js之在HTML中使用JavaScript 3、重学js之JavaScript基本概念(上)- 数据类型
<< 左移 用来将一个数的各二进制位全部左移N位,右补0。 >> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数, 高位补0。...位1的个数 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量)。提示:请注意,在某些语言(如 Java)中,没有无符号整数类型。...在这种情况下,输入和输出都将被指定为有符号整数类型,并且不应影响您的实现,因为无论整数是有符号的还是无符号的,其内部的二进制表示形式都是相同的。...在 Java 中,编译器使用二进制补码记法来表示有符号整数。因此,在上面的 示例 3 中,输入表示有符号整数 -3。...它把无符号的 32 位整数所有数位整体右移。对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。
有符号数最大值计算完全跟无符号数一样,但是在负数范围内就不能用刚才那种计算方式了,在计算机中,负数除了最高位为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位。
领取专属 10元无门槛券
手把手带您无忧上云