
发表日期: 2021-04-25 13:14:11 浏览次数:147
明港企业微信公众号小程序开发公司、明港企业网页设计方案、明港做网站开发价格、明港微信公众号制作运营报价明细表、明港网站设计公司费用、明港网站推广大概需要多少钱
明港镇,河南省信阳市平桥区下辖镇,因滨邻明河通衢四海而得名,位于信阳、南阳、驻马店3市,平桥、浉河、正阳、确山、桐柏、泌阳6县(区)接合部,南邻大别山区,北接豫东平原,素有“中原名邑”的美誉。 [1]
明港镇总面积167平方公里,下辖24个村委会、11个居委会,2016年城镇建成区面积为29.4平方公里 [2] 。全镇实现地区生产总值59.89亿元,财政收入1.27亿元。 [2]
明港镇是全国重点镇 [3] 、全国经济发达镇改革试点 [4] 、全国文明村镇 [5] 、全国综合实力千强镇 [6] 、河南省重点镇 [7] 。明港镇交通便利,是中国唯一同时拥有机场、高铁、高速公路出入口的建制镇 [2] 。有城阳城、天目山、皂角树遗址等旅游景点。
位操作符用于在最基本的层次上,即按内存中表示数值的位来操作数值。ECMAScript中的所有数值都以IEEE-754 64位格式存储,但位操作符并不直接操作64位的值。而是先将64位的值转换成32位的整数,然后执行操作,最后再将结果转换回64位。对于开发人员来说,由于64位存储格式是透明的,因此整个过程就像是只存在32位的整数一样。
对于有符号的整数,32位中的前31位用于表示整数的值。第32位用于表示数值的符号:0表示正数,1表示负数。这个表示符号的位叫做符号位,符号位的值决定了其他位数值的格式。其中,正数以纯二进制格式存储,31位中的每一位都表示2的幂。第一位(叫做位0)表示20,第二位表示21,以此类推。没有用到的位以0填充,即忽略不计。例如,数值18的二进制表示是00000000000000000000000000010010,或者更简洁的10010。这是5个有效位,这5位本身就决定了实际的值(如图3-1所示)。

图 3-1
负数同样以二进制码存储,但使用的格式是二进制补码。计算一个数值的二进制补码,需要经过下列3个步骤:
求这个数值绝对值的二进制码(例如,要求-18的二进制补码,先求18的二进制码);
求二进制反码,即将0替换为1,将1替换为0;
得到的二进制反码加1。
要根据这3个步骤求得-18的二进制码,首先就要求得18的二进制码,即:
0000 0000 0000 0000 0000 0000 0001 0010复制代码
然后,求其二进制反码,即0和1互换:
1111 1111 1111 1111 1111 1111 1110 1101复制代码
最后,二进制反码加1:
1111 1111 1111 1111 1111 1111 1110 1101 1---------------------------------------1111 1111 1111 1111 1111 1111 1110 1110复制代码
这样,就求得了-18的二进制表示,即11111111111111111111111111101110。要注意的是,在处理有符号整数时,是不能访问位31的。
ECMAScript会尽力向我们隐藏所有这些信息。换句话说,在以二进制字符串形式输出一个负数时,我们看到的只是这个负数绝对值的二进制码前面加上了一个负号。如下面的例子所示:
var num = -18;alert(num.toString(2)); // "-10010"复制代码
要把数值-18转换成二进制字符串时,得到的结果是"-10010"。这说明转换过程理解了二进制补码并将其以更合乎逻辑的形式展示了出来。
默认情况下,ECMAScript中的所有整数都是有符号整数。不过,当然也存在无符号整数。对于无符号整数来说,第32位不再表示符号,因为无符号整数只能是正数。而且,无符号整数的值可以更大,因为多出的一位不再表示符号,可以用来表示数值。
在ECMAScript中,当对数值应用位操作符时,后台会发生如下转换过程:64位的数值被转换成32位数值,然后执行位操作,最后再将32位的结果转换回64位数值。这样,表面上看起来就好像是在操作32位数值,就跟在其他语言中以类似方式执行二进制操作一样。但这个转换过程也导致了一个严重的副效应,即在对特殊的NaN和Infinity值应用位操作时,这两个值都会被当成0来处理。
如果对非数值应用位操作符,会先使用Number()函数将该值转换为一个数值(自动完成),然后再应用位操作。得到的结果将是一个数值。
按位非(NOT)
按位非操作符由一个波浪线(~)表示,执行按位非的结果就是返回数值的反码。按位非是ECMAScript操作符中少数几个与二进制计算有关的操作符之一。下面看一个例子:
![]()
var num1 = 25; // 二进制00000000000000000000000000011001var num2 = ~num1; // 二进制11111111111111111111111111100110alert(num2); // -26复制代码
BitwiseNotExample01.htm
这里,对25执行按位非操作,结果得到了-26。这也验证了按位非操作的本质:操作数的负值减1。因此,下面的代码也能得到相同的结果:
var num1 = 25;var num2 = -num1 - 1;alert(num2); // "-26"复制代码
虽然以上代码也能返回同样的结果,但由于按位非是在数值表示的最底层执行操作,因此速度更快。
按位与(AND)
按位与操作符由一个和号字符(&)表示,它有两个操作符数。从本质上讲,按位与操作就是将两个数值的每一位对齐,然后根据下表中的规则,对相同位置上的两个数执行AND操作:
| 第一个数值的位 | 第二个数值的位 | 结 果 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
简而言之,按位与操作只在两个数值的对应位都是1时才返回1,任何一位是0,结果都是0。
下面看一个对25和3执行按位与操作的例子:
![]()
var result = 25 & 3;alert(result); //1复制代码
BitwiseAndExample01.htm
可见,对25和3执行按位与操作的结果是1。为什么呢?请看其底层操作:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011---------------------------------------------AND = 0000 0000 0000 0000 0000 0000 0000 0001复制代码
原来,25和3的二进制码对应位上只有一位同时是1,而其他位的结果自然都是0,因此最终结果等于1。
3. 按位或(OR)
按位或操作符由一个竖线符号(|)表示,同样也有两个操作数。按位或操作遵循下面这个真值表。
| 第一个数值的位 | 第二个数值的位 | 结 果 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
由此可见,按位或操作在有一个位是1的情况下就返回1,而只有在两个位都是0的情况下才返回0。
如果在前面按位与的例子中对25和3执行按位或操作,则代码如下所示:
![]()
var result = 25 | 3;alert(result); //27复制代码
BitwiseOrExample01.htm
25与3按位或的结果是27:
25 = 0000 0000 0000 0000 0000 0000 0001 10013 = 0000 0000 0000 0000 0000 0000 0000 0011--------------------------------------------OR = 0000 0000 0000 0000 0000 0000 0001 1011复制代码
可以看到,有四位包含1,因此可以把每个1直接放到结果中。二进制码11011等于十进制值27。
4. 按位异或(XOR)
按位异或操作符由一个插入符号(^)表示,也有两个操作数。以下是按位异或的真值表。
| 第一个数值的位 | 第二个数值的位 | 结 果 |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
按位异或与按位或的不同之处在于,这个操作在两个数值对应位上只有一个1时才返回1,如果对应的两位都是1或都是0,则返回0。
对25和3执行按位异或操作的代码如下所示:
var result = 25 ^ 3;alert(result); //26复制代码
BitwiseXorExample01.htm
25与3按位异或的结果是26,其底层操作如下所示:
25 = 0000 0000 0000 0000 0000 0000 0001 1001 3 = 0000 0000 0000 0000 0000 0000 0000 0011---------------------------------------------XOR = 0000 0000 0000 0000 0000 0000 0001 1010复制代码
这两个数值都包含4个1,但第一位上则都是1,因此结果的第一位变成了0。而其他位上的1在另一个数值中都没有对应的1,可以直接放到结果中。二进制码11010等于十进制值26(注意这个结果比执行按位或时小1)。
5. 左移
左移操作符由两个小于号(<<)表示,这个操作符会将数值的所有位向左移动指定的位数。例如,如果将数值2(二进制码为10)向左移动5位,结果就是64(二进制码为1000000),代码如下所示:
![]()
var oldValue = 2; // 等于二进制的10var newValue = oldValue << 5; // 等于二进制的1000000,十进制的64复制代码
LeftShiftExample01.htm
注意,在向左移位后,原数值的右侧多出了5个空位。左移操作会以0来填充这些空位,以便得到的结果是一个完整的32位二进制数(见图3-2)。

图 3-2
注意,左移不会影响操作数的符号位。换句话说,如果将-2向左移动5位,结果将是-64,而非64。

明港企业微信公众号小程序开发公司、明港企业网页设计方案、明港做网站开发价格、明港微信公众号制作运营报价明细表、明港网站设计公司费用、明港网站推广大概需要多少钱
服务热线
顶部
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: http://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878