Java 中的位运算与移位运算详解
作者:.D.. 发布时间:2022-03-10 09:34:19
目录
位运算
按位“与” &
按位“或” |
异或 ^
移位运算
左移 <<
右移 >>
无符号右移 >>>
总结
位运算
按位“与” &
规则: 如果两个相应的二进制形式的对应的位数都为 1,则结果为 1;否则为 0; | ||
4 & 5 | ||
4 | 0000 0100 | |
5 | 0000 0101 | |
按位与运算 | & | |
4 & 5 = 4 | 0000 0100 | |
1 * 2^2 = 4 | ||
-4 & 5 | ||
-4 | 1111 1100 | |
5 | 0000 0101 | |
按位与运算 | & | |
规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循) | ||
-4 & 5 = 4 | 0000 0100 | |
1 * 2^2 = -4 |
1.正数直接取二进制运算
2.负数取反加一得补码再运算,得到的结果符号位为 0,不需要做任何操作直接给出结果
按位“或” |
规则: 有 1 为 1;否则为 0; | ||
4 | 5 | ||
4 | 0000 0100 | |
5 | 0000 0101 | |
按位或运算 | ||
4 | 5 = 5 | 0000 0101 | |
1 * 2^0 + 1 * 2^2 = 5 | ||
-4 | 5 | ||
-4 | 1111 1100 | |
5 | 0000 0101 | |
按位或运算 | ||
规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循) | ||
-4 | 5 = | 1111 1101 | |
减1 | 1111 1100 | |
取反 | -0000 0011 | -4 | 5 = -3 |
1 * 2^0 + 1 * 2^1 = -3 |
异或 ^
规则: 相同为 0;不同为 1; | ||
4 ^ 5 | ||
4 | 0000 0100 | |
5 | 0000 0101 | |
按位异或运算 | ^ | |
4 ^ 5 = 1 | 0000 0001 | |
1 * 2^0 = 1 | ||
-4 ^ 5 | ||
-4 | 1111 1100 | |
5 | 0000 0101 | |
按位异或运算 | ^ | |
规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循) | ||
-4 ^ 5 = | 1111 1001 | |
减1 | 1111 1000 | |
取反 | -0000 0111 | -4 ^ 5 = -7 |
1 * 2^0 + 1 * 2^1 + 1 * 2^2 = -7 |
移位运算
左移 <<
规则: 右边空出的位用 0 填补高位,左移溢出则舍弃该高位。 | ||
8 << 2 | ||
8 | 0000 1000 | |
<< 2 | 0010 0000 | |
左移运算符 | << | |
结果 | 8 << 2 = 32 | |
1 * 2^5 = 32 | ||
-8 << 2 | ||
-8 | 1111 1000 | |
<< 2 | 1110 0000 | |
左移运算 | << | |
规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循) | ||
减1 | 1101 1111 | |
取反 | -0010 0000 | -8 << 2 = -32 |
1 * 2^5 = -32 |
右移 >>
规则: 左边空出的位正数用 0 负数 1 填补,右移溢出则舍弃该低位。 | ||
8 >> 2 | ||
8 | 0000 1000 | |
>> 2 | 0000 0010 | |
左移运算符 | >> | |
结果 | 8 >> 2 = 2 | |
1 * 2^1 = 2 | ||
-8 >> 2 | ||
-8 | 1111 1000 | |
>> 2 | 1111 1110 | |
左移运算 | >> | |
规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循) | ||
减1 | 1111 1101 | |
取反 | -0000 0010 | -8 >> 2 = -2 |
1 * 2^1 = -2 |
无符号右移 >>>
规则: 正数与右移规则一样;负数无符号右移,在高位补 0 | ||
8 >>> 2 | ||
8 | 0000 1000 | |
>> 2 | 0000 0010 | |
无符号右移运算符 | >>> | |
结果 | 8 >>> 2 = 2 | |
1 * 2^1 = 2 | ||
-8 >>> 2 | ||
-8 | 1111 1111 1111 1111 1111 1111 1111 1000 | |
>>> 2 | 0011 1111 1111 1111 1111 1111 1111 1110 | |
无符号右移运算符 | >>> | |
规则:运算结果符号位是1,为负数, 需要减 1,再取反(其他运算也要遵循) | ||
减1 | - | |
取反 | - | -8 >>> 2 = 1073741822 |
1073741822 |
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
来源:https://blog.csdn.net/qq_29689487/article/details/122097670


猜你喜欢
- 本文实例为大家分享了C#实现简单串口通讯的具体代码,供大家参考,具体内容如下参数设置界面代码:using System;using Syst
- 一、 * 简介 * 通常通过 * 的方式来执行。 * 的生命周期由IoC容器管理,可以通过注入等方式来获取其他Bean的实例,使用更方便。
- Maven修改打包文件名称对Maven打出的jar包名称不满意:想通过修改配置给jar包改名,查询找到了方法:pom.xml的<bui
- 基于SpringCloud微服务平台,进行服务实例监控及健康检查,注册中心为eureka,SpringBoot提供了很好的组件SpringB
- 最近做了一个项目其中有需求,要实现自动登录功能,通过查阅相关资料,打算用session监听来做,下面给大家列出了配置 * 的方法:1.在项目
- Android 中启动自己另一个程序的activity如何实现可以使用action,举例: 1. 比如建立activity4,我
- 1.概述本文中,我将向你介绍Spring Cloud Netflix Turbine。它将多个Hystrix Metrics Streams
- 本文实例讲述了java实现新浪微博Oauth接口发送图片和文字的方法。分享给大家供大家参考。具体如下:基于网上很多人利用新浪api开发新浪微
- 介绍Java门面模式(Facade Pattern)是一种结构型设计模式,它提供了一个简单的接口,隐藏了复杂系统的实现细节,使得客户端可以更
- 有些SIM卡在出厂时并没有预置VoiceMail number,但运营商又要求能够根据PLMN去自适应的从手机中读取到预设的VM numbe
- 当需要将一个对象输出到显示器时,通常要调用他的toString()方法,将对象的内容转换为字符串.java中的所有类默认都有一个toStri
- 一、简介SpringBoot 中给普通变量注入值只需在变量上添加 @Value 注解即可。application.properties 配置
- .NET具有较多的优点,如:标准集成,简化应用,对移动设备的支持等。但使用.NET编写的程序有个致命的缺点:易被反编译,且运行时占用较大的资
- 一、什么是反射Java Reflaction in Action中的解释:反射是运行中的程序检查自己和软件运行环境的能力,它可以根据它发现的
- 本文详细的介绍了Spring组件的实现步骤,分享给大家,具体如下:背景Spring 框架提供了许多接口,可以使用这些接口来定制化 bean
- 一、简介:介绍两种使用 BitmapTransformation 来实现 Glide 加载圆形图片和圆角图片的方法。Glide 并不能直接支
- Annotation(注解)是JDK1.5及以后版本引入的。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以&
- 前言回老家,实在太无聊,于是乎给自己整了一套台式机配置,总价 1W+,本以为机器到位后可以打打游戏,学学技术打发无聊的时光。但是我早已不是从
- 本文实例为大家分享了Java实现银行ATM系统的具体代码,供大家参考,具体内容如下一、前言银行ATM系列简单操作二、使用步骤1.创建用户信息
- 本文实例为大家分享了Java代码对HDFS进行增删改查操作的具体代码,供大家参考,具体内容如下import java.io.File;imp