javascript进制转换_「js基础」JavaScript逻辑和位运算符归纳

上一篇文章呢,我们讲述了JavaScript运算符中的关系运算符逻辑运算符,那么紧接上一篇的文章我们今天来说说逻辑运算符

引言

逻辑运算符不是很难,也不是很多,我们只要记住三个就可以啦!分别是:

  1. ! 逻辑非
  2. && 逻辑与
  3. || 逻辑或

跟我们上初中判断命题的真假一样,返回的结果无异于真“或”“假”,原理上都是一样的,还有没有小伙伴记得啊?如下图:

e7eea9690081ee9dea649f83493c9bc3.png

命题的真假判断

JavaScript逻辑运算符也是一样的,我们先看看下图:

a4da2222fd6d5c333708f1bf7ced8bfd.png

逻辑运算符

其中expr可能是任何一种类型, 不一定是布尔值

逻辑非(!)

简单说就是不是(not)的意思,符合双重否定变肯定的旨意。

//给定 x=6 以及 y=3!(x==y) 为 true

规则:

  1. 如果一个操作数是一个对象,返回false。
  2. 如果一个操作数是一个空字符串,返回false。
  3. 如果一个操作数是一个非空字符串,返回false。
  4. 如果一个操作数是一个数值0,返回true。
  5. 如果一个操作数是任意的非零字符,返回false。
  6. 如果一个操作数是null,返回true。
  7. 如果一个操作数是NaN,返回true。
  8. 如果一个操作数是undefined,返回true。

特性:

1、如果运算数的值为false,则返回true,否则返回false。

2、连续使用两次,可将任意类型转化为布尔型值。

逻辑与(&&)

简单说就是和(and)的意思。

//给定 x=6 以及 y=3(x < 10 && y > 1) 为 true

规则:

  1. 第一个操作数是对象,则返回该对象。
  2. 第二个操作数是对象,第一个操作数值为true是返回该对象。
  3. 两个操作数都是对象,则返回第二个操作数。
  4. 一个操作数是NULL,返回NULL。
  5. 一个操作数是NaN,返回NaN。
  6. 一个操作数是undefined,返回undefined

例如:

var str = new Array(); console.log(str&&8);//返回值为8console.log(8&&null);//返回结果为null

特性:

1、当且仅当两个运算数的值都是true时,才返回true,否则返回false。

2、短路操作:当第一个操作数的值为false时,则不再对第二个操作数进行求值。

逻辑与,逻辑非都遵循从左向右判断,谁的第一个操作数逻辑判断为true就返回谁,只不过逻辑非必须两个都为true,而且谁是第一个false就返回谁。

逻辑或(||)

简单说就是或(or)的意思。

//给定 x=6 以及 y=3(x==5 || y==5) 为 false

规则:

  1. 第一个操作数是对象,返回第一个操作数
  2. 第一个操作数值为false,返回第二个操作数
  3. 两个操作数都是对象,返回第一个操作数
  4. 两个操作数都是NULL,返回NULL
  5. 两个操作数都是NaN,返回NaN
  6. 两个操作数都是undefined,返回undefined

特性:

1、当且仅当两个运算数的值都为false时,才会返回false,否则返回true。

2、如果第一个操作数值为true,则不会对第二个操作数进行求值。

位运算符

按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。

6731d0780cb2df52c80856c9330b988f.png

JavaScript中的按位操作符

有符号32位整数

所有的按位操作符的操作数都会被转成补码(two's complement)形式的有符号32位整数。补码形式是指一个数的负对应值(negative counterpart)(如 5和-5)为数值的所有比特位反转后,再加1。反转比特位即该数值进行’非‘位运算,也即该数值的反码。例如下面为整数314的二进制编码:

00000000000000000000000100111010

下面编码 ~314,即 314 的反码:

11111111111111111111111011000101

补码保证了当一个数是正数时,其最左的比特位是0,当一个数是负数时,其最左的比特位是1。因此,最左边的比特位被称为符号位(sign bit)。

0 是所有比特数字0组成的整数。

0 (base 10) = 00000000000000000000000000000000 (base 2)

-1 是所有比特数字1组成的整数。

-1 (base 10) = 11111111111111111111111111111111 (base 2)

-2147483648(十六进制形式:-0x80000000)是除了最左边为1外,其他比特位都为0的整数。

-2147483648 (base 10) = 10000000000000000000000000000000 (base 2)

2147483647(十六进制形式:0x7fffffff)是除了最左边为0外,其他比特位都为1的整数。

2147483647 (base 10) = 01111111111111111111111111111111 (base 2)

数字-2147483648 和 2147483647 是32位有符号数字所能表示的最小和最大整数。

按位逻辑操作符

从概念上讲,按位逻辑操作符按遵守下面规则:

  • 操作数被转换成32位整数,用比特序列(0和1组成)表示。超过32位的数字会被丢弃。例如, 以下具有32位以上的整数将转换为32位整数:
转换前: 11100110111110100000000000000110000000000001转换后:             10100000000000000110000000000001
  • 第一个操作数的每个比特位与第二个操作数的相应比特位匹配:第一位对应第一位,第二位对应第二位,以此类推。
  • 位运算符应用到每对比特位,结果是新的比特值。

& (按位与)

对每对比特位执行与(AND)操作。只有 a 和 b 都是 1 时,a AND b 才是 1。与操作的真值表如下:

6953dd0cecc6eac3daab2ef90b763a12.png
9 (base 10) = 00000000000000000000000000001001 (base 2)14 (base 10) = 00000000000000000000000000001110 (base 2)14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)

将任一数值 x 与 0 执行按位与操作,其结果都为 0。将任一数值 x 与 -1 执行按位与操作,其结果都为 x。

| (按位或)

af1aadf3e00fe43469dc8cda4cd41ba4.png

对每一对比特位执行或(OR)操作。如果 a 或 b 为 1,则 a OR b 结果为 1。或操作的真值表:

9 (base 10) = 00000000000000000000000000001001 (base 2)14 (base 10) = 00000000000000000000000000001110 (base 2)14 | 9 (base 10) = 00000000000000000000000000001111 (base 2) = 15 (base 10)

将任一数值 x 与 0 进行按位或操作,其结果都是 x。将任一数值 x 与 -1 进行按位或操作,其结果都为 -1。

^ (按位异或)

对每一对比特位执行异或(XOR)操作。当 a 和 b 不相同时,a XOR b 的结果为 1。异或操作真值表:

a76b7c1b20fa87b922dc83984936a975.png
9 (base 10) = 00000000000000000000000000001001 (base 2)14 (base 10) = 00000000000000000000000000001110 (base 2)14 ^ 9 (base 10) = 00000000000000000000000000000111 (base 2) = 7 (base 10)

将任一数值 x 与 0 进行异或操作,其结果为 x。将任一数值 x 与 -1 进行异或操作,其结果为 ~x。

~ (按位非)

对每一个比特位执行非(NOT)操作。NOT a 结果为 a 的反转(即反码)。非操作的真值表:

5b8d44a5a632462c70b8fcdba732a995.png
9 (base 10) = 00000000000000000000000000001001 (base 2)~9 (base 10) = 11111111111111111111111111110110 (base 2) = -10 (base 10)

对任一数值 x 进行按位非操作的结果为 -(x + 1)。例如,~5 结果为 -6。

按位移动操作符

按位移动操作符有两个操作数:第一个是要被移动的数字,而第二个是要移动的长度。移动的方向根据操作符的不同而不同。

按位移动会先将操作数转换为大端字节序顺序(big-endian order)的32位整数,并返回与左操作数相同类型的结果。右操作数应小于 32位,否则只有最低 5 个字节会被使用。

注:Big-Endian:高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,

又称为"高位编址"。

Big-Endian是最直观的字节序:

①把内存地址从左到右按照由低到高的顺序写出;

②把值按照通常的高位到低位的顺序写出;

③两者对照,一个字节一个字节的填充进去。

<< (左移)

该操作符会将第一个操作数向左移动指定的位数。向左被移出的位被丢弃,右侧用 0 补充。

例如:9 << 2 得到 36:

>> (有符号右移)

该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,拷贝最左侧的位以填充左侧。由于新的最左侧的位总是和以前相同,符号位没有被改变。所以被称作“符号传播”。

例如, 9 >> 2 得到 2:

9 (base 10): 00000000000000000000000000001001 (base 2)9 >> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)

>>> (无符号右移)

该操作符会将第一个操作数向右移动指定的位数。向右被移出的位被丢弃,左侧用0填充。因为符号位变成了 0,所以结果总是非负的。(译注:即便右移 0 个比特,结果也是非负的。)

对于非负数,有符号右移和无符号右移总是返回相同的结果。例如 9 >>> 2 和 9 >> 2 一样返回 2:

 9 (base 10): 00000000000000000000000000001001 (base 2)9 >>> 2 (base 10): 00000000000000000000000000000010 (base 2) = 2 (base 10)

但是对于负数却不尽相同。 -9 >>> 2 产生 1073741821 这和 -9 >> 2 不同:

-9 (base 10): 11111111111111111111111111110111 (base 2)-9 >>> 2 (base 10): 00111111111111111111111111111101 (base 2) = 1073741821 (base 10)

说到这里,本篇的逻辑运算符和位运算符我们就讲到这里了,下期我们再讲JavaScript数组

想了解更多的前端技术,关注我,持续为您输出干货,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

〖强暴贴〗号称全国最大开发者网络的CSDN多次出现低级错误 验证码形同虚设 开发人员竟是MVP

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshow主  题&#xff1a;【醒目】〖强暴贴〗号称全国最大开发者网络…

弟子规python编程游戏_《Python游戏趣味编程》 第11章 消灭星星

知乎视频​www.zhihu.com图书简介可以看这里&#xff1a;童晶&#xff1a;《Python游戏趣味编程》新书上架了​zhuanlan.zhihu.com消灭星星是一款非常容易上瘾的消除类游戏&#xff0c;只需点击一个方块&#xff0c;如果和其连接的有两个或两个以上颜色相同的方块即可消除&…

python判断英文字母_python判断字符串中是否含有英文 | 个人学习笔记记录

第一种方法&#xff1a; #-*- coding:utf-8 -*- import re def check(str): my_re re.compile(r[A-Za-z],re.S) res re.findall(my_re,str) if len(res): print u含有英文字符 else: print u不含有英文字符 if __name__ __main__: str 你好123hello check(str) str1 你好1…

idea ssm项目移包报错问题

写完代码之后发现包结构太乱了 想要规划一下 结果报错 这里面的包路径都可以点进去&#xff0c;还是报找不到com.lf.company.entity.Business 后来发现是 在移动前和移动后都存在这个mapper。xml 解决方案&#xff1a; 在这里把多余的删掉转载于:https://www.cnblogs.com/NCL…

matlab 写excel 慢_吐槽一下MATLAB的workspace

用MATLAB编程&#xff0c;或者Simulink建模仿真&#xff0c;有一个特别强大、特别人性化的功能&#xff0c;可以在workspace中直接查看定义的参数和运行的结果 无论是仿真的调试&#xff0c;结果的分析&#xff0c;或是中途的Debug&#xff0c;workspace都发挥着至关重要的作用…

MATLAB 图形着色

1.matlab中的颜色查找表函数&#xff1a; &#xff08;1&#xff09;autumn&#xff1a;从红色向橘黄色、黄色平稳过渡&#xff1b; &#xff08;2&#xff09;bone:为含有较高的蓝色组分的gray颜色查找表&#xff1b; &#xff08;3&#xff09;colorcube&#xff1a;包含RGB颜…

大学python笔记_Python 上手笔记

要是想在键盘上体验一下, 安装Python也很简单: 基本的编译环境应该已经包括了Python&#xff0c;但Mac系统最好在上面这个网站下载安装。在Linux系统中可以使用apt-get等工具来安装更新。另外假如系统内有多个Python版本&#xff0c;可能需要将Python的路径添加到配置文件&…

D - F e n d 簡 單 教 學 DOSBOX Easy Shell 【玩DOS游戏的必备软件】

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshowD - F e n d 簡 單 教 學■寫 在 前 面自去年無意間接觸到DOSBox…

arma模型谱估计matlab_基于机器学习的心律失常分类(四)——心电信号特征提取[MATLAB]...

目前比较常用的特征提取是提取心电信号的各波形间期长度、波峰高度等&#xff0c;本文是使用ARMA模型对心电信号进行处理&#xff0c;使用其系数来作为特征。一、心拍划分大多伴有异常波形的心律失常信号&#xff0c;通常都会具体表现在单个心拍中&#xff0c;需要对信号进行心…

目睹DNS怪现状 本地对DNS的设定故障分析

分享一下我老师大神的人工智能教程。零基础&#xff01;通俗易懂&#xff01;风趣幽默&#xff01;还带黄段子&#xff01;希望你也加入到我们人工智能的队伍中来&#xff01;https://blog.csdn.net/jiangjunshowDNS&#xff08;Domain Name System&#xff09;在tcp/ip网络中&…

python文件输入符_python文件IO与file操作

1 标准输入输出IO - (1) 打印到屏幕 print() print(self, *args, sep’ ‘, end’n’, fileNone): 把传递的表达式 转换成一个 字符串表达式 known special case of print """ print(value, ..., sep , endn, filesys.stdout, flushFalse) Prints the values to…

和县机电工程学校工业机器人_【校企合作】学校举行工业机器人教学系统捐赠仪式...

点击上方蓝字关注我们12月22日下午&#xff0c;我校与广东诚飞智能科技有限公司在公共实训中心会议室举行了“工业机器人教学系统”捐赠仪式。广东诚飞智能科技有限公司总经理杨成芳、区域经理杨少杰&#xff0c;学校副校长罗红金、教务科科长冯华以及机电专业组教师代表参加了…

TCP三次握手(待细研究)

xu言&#xff1a; 看到一张不错清晰的Tcp三次握手图&#xff0c;收藏 Initiator 发起人 Receiver 接收者 LISTENING 状态xx服务启动后首先处于侦听&#xff08;LISTENING&#xff09;状态。 ESTABLISHED 状态ESTABLISHED的意思是建立连接。表示两台机器正在通信。 CLOSE_WAIT…

ubuntu20.04下安装vmshare tools_Go语言的安装与配置-vscode

vscode是比较好用的&#xff0c;虽然goland自带插件但是收费&#xff0c;所以配置vscode虽然麻烦但是也值得。Step1.下载安装vscode和golangDownload Visual Studio Code - Mac, Linux, Windows​code.visualstudio.comThe Go Programming Language​golang.google.cnnext step…

小说中人称转换作用_长篇儿童小说《合欢》:一树红绒落马缨

浙江少年儿童出版社出版肖复兴的第二部长篇儿童小说《合欢》&#xff0c;因对儿童独立人格的自觉尊重与强调&#xff0c;以及对人物复杂内心世界的深度开掘与勘探&#xff0c;回应了“儿童的被发现”这一重要课题。《合欢》不仅是作者对“远逝的童年”的一次深情回眸&#xff0…

asp按时间自动递增编号_约束力最强的手铐——美国ASP钢性手铐

美国ASP公司生产的钢性手铐&#xff0c;是目前为止世界上约束力最大的手铐。这种手铐的最初设计&#xff0c;是借鉴了中国古代的刑具——枷。钢性的手铐链接&#xff0c;非常好的约束罪犯的双手&#xff0c;使其没有任何活动的空间。而且最大的好处就是&#xff0c;执法人员只要…

脚本启动慢_Linux 常用运维脚本,建议收藏

同步本机时间ntpdate 210.72.145.44清除系统缓存&#xff0c;空出更多内存free && sync && echo 3 > /proc/sys/vm/drop_caches && free杀掉僵尸进程kill $(ps -A -ostat,ppid | awk /[zZ]/ && !a[$2] {print $2})显示全部arp解析tcpdump a…

eclipse maven项目 class类部署不到tomcat下_Servlet tomcat部署

网上搜到的很多利用eclipse结合tomcat开发servlet的教程都要修改server.xml感觉这种方式太粗暴了&#xff0c;server.xml最好是与应用无关的&#xff0c;这里比较推荐export war的方式进行部署先记录一下环境配置过程我的系统是ubuntu 14.04&#xff1b;下载eclipse for javaee…

tensorflow 指定cpu 但是还会运行 gpu_PyTorch VS TensorFlow 谁最强?这是标星 15000+ Transformers 库的运行结果...

点击上方“AI有道”&#xff0c;选择“星标”公众号重磅干货&#xff0c;第一时间送达作者 | Lysandre Debut译者 | 陆离出品 | AI科技大本营(ID: rgznai100)【导语】自然语言处理预训练模型库 Transformers 实现了几种用于 NLP 任务的最先进的 Transformer 架构&#xff0c;如…

after不显示_web前端入门到实战:css实现单行、多行文本超出显示省略号

前言&#xff1a;项目中我们经常遇到这种需求&#xff0c;需要对单行、多行文本超出显示为省略号。这篇文章主要总结了小编解决此问题的方法&#xff0c;有不足之处欢迎大家指正。单行文本省略.ellipsis-line {border: 1px solid #f70505;padding: 8px;width: 400px;overflow: …