首页 > 其他分享 >js 中的~~含义

js 中的~~含义

时间:2024-04-08 11:22:29浏览次数:25  
标签:十六进制 权重 二进制 含义 js 运算符 按位 十进制

~ bitwise NOT 运算符

~对操作数按位取反,两个的意思即作两次取反操作,其实是等作原数本身(操作数是32整数范围内)

~~(Math.random()*7)
//即
var n = Math.random() * 7;
n = ~n;
n = ~n;//其实和初始值一样

和对BOOLEAN类型的做两次 ! 操作是一个意思,只不过是把小数位给去掉了,即取整数。

console.log(~~(3.7348286093143717))   //3

总结:~是js里的按位取反操作符 , ~~ 就是执行两次按位取反,其实就是保持原值,但是注意虽然是原值,但是对布尔型变量执行这个操作,会转化成相应的数值型变量,也就是

~~true === 1,~~false === 0, ~~"" == 0 , ~~[] == 0

推荐用>>操作符,一次即可:

var n = Math.random() * 7;
n = n>>0;

~运算符的详细解释:

将 expression 转换为一个 32 位带符号整数,然后按位对 1 求补。即,将结果中为 0 的每一位设置为 1,并将结果中为 1 的每一位设置为 0。结果是一个带符号的 32 位整数。此运算符也称为对一求补运算符或按位求补运算符。

例如,十六进制值 0x7777 表示为二进制数:

0111011101110111

该十六进制值 ~0x7777 的按位取反的二进制数为:

1000100010001000

在十六进制中,它是 0x8888。因此,~0x7777 就是 0x8888。

按位运算符的最常见用法是提供特征位(为每一位填充一个布尔值)。

扩展:

十六进制转二进制:

十六进制(Hexadecimal)是一种逢16进1的进位计数制,使用16个符号来表示数值。这些符号包括0-9的阿拉伯数字和A-F的字母(其中A代表10,B代表11,C代表12,D代表13,E代表14,F代表15)。因此,在十六进制中,“A”表示十进制中的数值10。

要将十六进制的“A”转换为二进制,我们需要将这个十进制数值10转换成二进制形式。二进制是一种逢2进1的进位计数制,使用两个符号0和1来表示数值。

转换步骤如下:

  1. 将十进制数10除以2,得到商5和余数0。
  2. 将商5继续除以2,得到商2和余数1。
  3. 再将商2除以2,得到商1和余数0。
  4. 最后将商1除以2,得到商0和余数1。

此时,所有的商都为0,无需继续除法。按照“倒序取余”的规则,将上述每次除法得到的余数从下往上排列,即构成了十进制数10对应的二进制数:

110 (十进制) = 1010 (二进制)

所以,十六进制的“A”对应的二进制是1010

二进制转十进制:

1、确定二进制数的每一位

二进制数由若干个0和1组成,每个位置上的数字代表不同的权重。最右边的位(通常称为最低位,LSB)的权重最小,往左依次增大,每向左一位,权重翻倍。

2、计算每位二进制位的值

对于二进制数中的每一位,将其值乘以其对应的权重(即2的幂次方)。具体权重由该位的位置决定,从右向左数第一位的权重是2020(即1),第二位的权重是2121(即2),第三位的权重是2222(即4),依此类推。

3、求和

将各位二进制位的值与其权重的乘积相加,得到的总和就是该二进制数对应的十进制数值。

示例:

将二进制数10110转换为十进制数。

  • 第一位(最右边的位)是0,权重为20=120=1,所以其值为0 × 1 = 0
  • 第二位是1,权重为21=221=2,所以其值为1 × 2 = 2
  • 第三位是1,权重为22=422=4,所以其值为1 × 4 = 4
  • 第四位是0,权重为23=823=8,所以其值为0 × 8 = 0
  • 第五位(最左边的位)是1,权重为24=1624=16,所以其值为1 × 16 = 16

将这些值相加:

10 + 2 + 4 + 0 + 16 = 22

因此,二进制数10110对应的十进制数是22

 

标签:十六进制,权重,二进制,含义,js,运算符,按位,十进制
From: https://www.cnblogs.com/redFeather/p/18120713

相关文章

  • node.js 安装及配置环境变量只看此文
    转发:https://blog.csdn.net/u014212540/article/details/1302606791.node.js安装2.Node.js环境变量配置3.国内镜像网站配置4.npm、yarn、pnpm、nrm常用命令4.1nrm常用命令:4.2npm常用指令:4.3yarn常用命令:5.常规上传至npm公共注册表方法(npmpublish/yarnpublish)......
  • postgresql查询json类型字段中的数据
    在PostgreSQL中,JSON类型字段的使用已经越来越广泛。如果需要从JSON类型字段中查询数据,PostgreSQL提供了一系列的操作符和函数,使得查询和处理JSON数据变得非常方便。本文将为您介绍一些常用的查询JSON类型字段的方法和函数。查询JSON类型字段中的所有键如果需要查询......
  • WebSocket manager.js:115 GET http://IP:8000/socket.io/?EIO=4&transport=polling&t
    前言全局说明WebSocket报错net::ERR_CONNECTION_TIMED_OUT一、问题:WebSocket报错net::ERR_CONNECTION_TIMED_OUT二、原因:可能和后端的服务链接不上导致的三、解决方法:重启启动后端服务免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后......
  • 计算机毕业设计项目:springboot 智能答疑系统 96852(开题答辩+程序定制+全套文案 )上万套
    毕业论文(设计) 题   目springboot智能答疑系统学   院       XXXXX     专业班级   XXXXX学生姓名       XXXX    指导教师            XXXX          撰写日期:202 年 月 日目 录摘要......
  • 计算机毕业设计项目:新生儿疫苗接种管理系统 87023(开题答辩+程序定制+全套文案 )上万套
    PHP新生儿疫苗接种管理系统系   院XXXX学科门类XXX专   业 XXX班级XXX学   号XXX姓   名XXX指导教师XXX教师职称XXX摘 要新生儿计划免疫是根据危害儿童健康的一些传染病,利用安全有效的疫苗,按照规定的免疫程序进行预防接种,......
  • JS插件补充
    一、SweetAlert1、介绍SweetAlert是一个基于JavaScript的弹窗插件,用于创建美观而且高度可定制的弹窗效果。SweetAlert提供了多种弹窗风格和动画效果,可以用于警告、确认、提示和错误等不同的场景。2、特点(1)漂亮的外观SweetAlert创建的弹窗外观美观、现代,比浏览器原生弹......
  • VSCode 终端显示“pnpm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此
    解决方案:1.用get-ExecutionPolicy命令在vscode终端查询状态get-ExecutionPolicy返回Restricted说明状态是禁止的2.用set-ExecutionPolicyRemoteSigned命令更改状态即可set-ExecutionPolicyRemoteSigned此时再输入get-ExecutionPolicy,显示RemoteSigned即可正常执......
  • 「GIS数据」下载全国的GeoJSON、shp格式数据(精确到乡镇街道级)-2024年4月更新
    发现个可以免费下载全国 geojson 数据的网站,推荐一下。支持全国、省级、市级、区/县级、街道/乡镇级以及各级的联动数据,支持导入矢量地图渲染框架中使用,例如:D3、Echarts等geojson数据下载地址:https://geojson.hxkj.vip该项目github地址:https://github.com/TangSY/echarts-m......
  • 30 天精通 RxJS (09):Observable Operator - skip, takeLast, last, concat, startWith, merge
    运营商skip我们昨天介绍了take可以取前几个送出的元素,今天介绍可以略过前几个送出元素的operator:skip,范例如下:varsource=Rx.Observable.interval(1000)varexample=source.skip(3)example.subscribe({ next:(value)=>{ console.log(value) }, error:(err)......
  • JS模块化——AMD、CommonJS和ESModules
    文章目录JS模块化——AMD、CommonJS和ESModules方法介绍传统方法:立即执行函数:异步模块定义AMD:CommonJS:ESModules:CommonJS和ESModules区别JS模块化——AMD、CommonJS和ESModules前端模块化是指将前端代码拆解成互相独立的小块,每一块完成特定的功能,这些小块被......