位运算符详细解析

2023-11-11

位运算符计算,先把十进制转为二进制,计算完在转回十进制,以下位转换和计算规则

⼗进制和⼆进制的转换
⼗进制转⼆进制:⽬标数除以2,若能除尽,该位记做0,若除不尽,该位记做1,再对商继续除以2,以
此类推,直到商为0,然后把每⼀位的结果反序组合就是对应的⼆进制。
比如对十进制目标数10转二进制:
10/2=5–>0
5/2=2.5–>1
2/2=1–>0
1/2=0.5–>1
从下往上对应从左往右排列 所以转为的二进制是:1010

比如对十进制目标数17转二进制:
17/2=8.5–>1
8/2=4–>0
4/2=2–>0
2/2=1–>0
1/2=0.5–>1
从下往上对应从左往右排列 所以转为的二进制是:10001

⼆进制转⼗进制:从⽬标数的最后侧起,本位的数值乘以本位的权重,权重就是2的第⼏位的位数减⼀
次⽅,将每⼀位的值进⾏相加,得到的结果就是对应的⼗进制。
例如将二进制1010转为十进制

1                0               1                0
1*2^3    +     0* 2^2     +     1*2^1    +      0*2^0 = 8+0+2+0=10

例如将二进制10001转为十进制

   1            0               0                0               1
1*2^4    +   0*2^3      +     0*2^2      +     0*2^1     +      1*2^0 = 16+0+0+0+1 = 17  

位运算符:&(按位与)、|(按位或)、^(按位异或)、<<(左移)、>>(右移)

1、&(按位与)
计算规则:变量1 & 变量2:先把变量 1 和变量 2 转为⼆进制,每⼀位的数字⼀⼀对应,进⾏⽐较判断,若都为
1,则该位记做 1,否则记做 0
例如:计算10 & 17
位数不够左边补0,例如17的二进制是10001,10的二进制是1010比17的二进制少一位所以在前边补0变为01010

 0  1  0  1  0
 1  0  0  0  1
 -------------
 0  0  0  0  0 = 0(参考二进制转十进制的算法,所以结果是0

2、|(按位或)
计算规则:变量1 | 变量2:先把变量 1 和变量 2 转为⼆进制,每⼀位的数字⼀⼀对应,进⾏⽐较判断,只要有1个为 1,则该位记做 1,否则记做 0
例如:计算10 | 17

 0  1  0  1  0
 1  0  0  0  1
 -------------
 1  1  0  1  1 = 1*2^4+1*2^3+0+1*2^1+1*2^0 = 16+8+0+2+1=27

3、^(按位异或)
计算规则:变量1 ^ 变量2:先把变量 1 和变量 2 转为⼆进制,每⼀位的数字⼀⼀对应,进⾏⽐较判断,相同记做0,不同记做 1。
例如:计算10 ^17

 0  1  0  1  0
 1  0  0  0  1
 -------------
 1  1  0  1  1 = 27  

看到这里,可能就有人发现,咦,这个10 | 17 和这个10 ^17怎么结果一样,是不是有问题,下边代码校验

public class Demo2 {
    public static void main(String[] args) {
        //假设目标是是10
        int a = 10 | 17;
        int b = 10^17;
        System.out.println(a);
        System.out.println(b);
        System.out.println(a == b);
    }
}
27
27
true

两个结果都是27,结果位true

4、<<(左移)
计算规则:变量1 << 变量2:变量1乘以2的变量2次⽅ a<<b = a*2^b (a , b必须是整数)
举例子:2<<3

结果=2*2^3 = 2*8=16

5、>>(右移)
计算规则:变量1 >> 变量2:变量1除以2的变量2次⽅ a>>b = a/2^b,若结果为整数带小数则取整数,如果结果为复数带小数,结果取整然后减1
举例子:1>>2

结果=1/2^2 = 1/4 = 0.25 = 0

使用代码校验

public class Demo2 {
    public static void main(String[] args) {
        //假设目标是是10
        System.out.println(2<<3);
        System.out.println(1>>4);
        System.out.println(-1>>4);
    }
}
16
0
-1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

位运算符详细解析 的相关文章

随机推荐

  • Spring Boot参考教程(七)Spring Boot Jar方式读取资源文件

    5 Spring Boot Jar方式读取资源文件 在2 2 2章节中已说明SpringBoot的一个特性就是独立运行 内嵌Servlet容器 在Spring Boot工程以jar方式独立运行开发时会遇到一些问题 本章节主要说明读取静态资源
  • Reformer RoPE,旋转位置编码,关于Transformer当中的位置编码的优化考察

    1 工作简介 这篇文章是苏剑林的一篇关于Transformer当中的位置编码的优化考察 众所周知 transformer的attention机制本身是不带有位置信息的 因此对于文本序列 attention机制本身就会丢失掉原文当中的序列信息
  • Python二叉树构建(完全二叉树)

    Python完全二叉树的构建 包含广度优先插入节点 广度遍历 先序 中序 后序遍历等函数 class Node object 节点 def init self item self elem item self lchild None sel
  • 【AI目标检测】MMROTATE踩坑记录

    MMROTATE介绍 MMRotate 是一款基于 PyTorch 的旋转框检测的开源工具箱 是 OpenMMLab 项目的成员之一 MMROTATE安装 mmrotate的安装同mmdet等类似 参考mmrotate安装 创建环境 con
  • 单调栈和滑动窗口【题解】

    全文目录 单调栈 代码 滑动窗口 单调队列 代码 单调栈 单调栈 顾名思义就是具有单调性的栈 通常是用来求数组中的左边第一个比自身小或者大的数 使用场景还是比较有限的 但是对于解题还是有着很大的帮助的 我们还是通过题目来进行讲解 对于这种题
  • php一个字段多条件查询,ThinkPHP使用数组条件进行查询之同一字段多个条件

    对同一表中多个字段的查询 在thinkPHP中使用数组条件进行查询 有三个好处 第一可以批量设置多个查询字段 第二可以设置多个查询条件 第三结构化你的代码 让代码更具可读性 数组条件查询有简单数组查询 数组表达式查询 一般使用 map保存数
  • VSCode远程连接Linux服务器时遇到连接超时问题

    1 确保Linux服务器已经安装并运行了SSH服务 可以使用以下命令检查SSH服务的状态 sudo systemctl status ssh 可以设置开机自启 sudo systemctl enable ssh 2 使用ping命令检查ip
  • 快速掌握Nodejs安装以及入门

    一 Nodejs 1 1 Nodejs介绍 官网 http nodejs cn Node 是一个让 JavaScript 运行在服务端的开发平台 它让 JavaScript 成为与PHP Python Perl Ruby 等服务端语言平起平
  • LeetCode小算法记录(二十二)最长回文串

    给定一个包含大写字母和小写字母的字符串 找到通过这些字母构造成的最长的回文串 在构造过程中 请注意区分大小写 比如 Aa 不能当做一个回文字符串 注意 假设字符串的长度不会超过 1010 示例 1 输入 abccccdd 输出 7 解释 我
  • SpringBoot的完整学习

    springBoot 配置如何编写 yaml 自动装配原理 集成web开发 业务的核心 集成数据库 Druid 分布式开发 Dubbo zookeeper swagger 接口文档 任务调度 SpringSecunity Shiro 1 微
  • Fastadmin开源CRM客户管理系统融合开发呼叫中心系统

    基于Fastadmin中开源CRM客户管理系 并支持小程序端UNIapp 统融合开发呼叫中心系统 在crm管理系统中 并实现了来去电弹屏 网页通话等功能 助力企业销售全流程精细化 数字化管理 全面解决企业销售团队的全流程客户服务难题 帮助企
  • 我的第一个半平面交(1007: [HNOI2008]水平可见直线)

    点击打开链接 Description Input 第一行为N 0 lt N lt 50000 接下来的N行输入Ai Bi Output 从小到大输出可见直线的编号 两两中间用空格隔开 Sample Input 3 1 0 1 0 0 0 S
  • Android EditText设置边框

    Android EditText设置边框 简介 Android应用程序中给EditText设置边框 效果图 快速开始 在res drawable目录下新建样式文件 edit background xml
  • iphone彻底删除照片如何恢复_想要从iPhone恢复永久删除的照片,这些方法一定要掌握...

    当你不小心删除了iPhone上的照片 你一定非常伤心难过 因为这些照片都是你生活点滴最好的见证 有你太多的回忆 今天小编将向您展示如何从iPhone恢复已删除的照片 如何在iPhone上还原照片以及防止其再次发生的最佳方法 从iPhone恢
  • 报错:StandardServletMultipartResolver : Failed to perform cleanup of multipart items

    报错 在文件上传接口 解析文件的时候报错 报错信息如下 s w m s StandardServletMultipartResolver Failed to perform cleanup of multipart items java i
  • idea工程在maven projects中显示灰色的解决办法

    在Mac上使用idea进行开发的过程中 一般在MavenProject中包含四个文件如下 1 profile 2 WebMavenTest 工程名 3 WebMavenTestSdk 工程名SDK 4 WebMavenTestService
  • 台式计算机显卡最高温度多少,台式机显卡温度多少是正常的(揭晓显卡正常温度度数)...

    PS 本文只讨论台式机 笔记本与台式机相比性能是偏低的 所以只要保证风扇能正常运转的话 基本上不会出现烧坏的情况 温度多少算正常 要知道电脑的硬件温度是不是过高 首先要了解硬件的正常温度范围 1 CPU 在电脑仅仅保持开机的情况下 一般是3
  • VLC打不开视频文件调试技巧

    用VLC打开TS文件 如果只有视频流的话可以打开 添加进了SRT字幕 打开失败 暴风 QQ影音 KMPlayer都可以正常打开 查询原因 下面是一个VLC自带的查询功能 或按快捷键Ctrl M 打开后的界面如下 注意下面的冗长等级是关键 它
  • 第1章 创建一个html网页

    创建一个html网页 目录标题 1 1认识html 1 2html标签 1 3html文件的基本结构 1 4Chrome的开发者工具 1 5在记事本中编写HTML文件 1 6使用编辑器创建HTML文档 1 6 1下载Hbuilder X 1
  • 位运算符详细解析

    位运算符计算 先把十进制转为二进制 计算完在转回十进制 以下位转换和计算规则 进制和 进制的转换 进制转 进制 标数除以2 若能除尽 该位记做0 若除不尽 该位记做1 再对商继续除以2 以 此类推 直到商为0 然后把每 位的结果反序组合就是