JavaSE-位运算

EXCEL VBA 导出高清图片方法 EXCEL VBA 导出高清图片方法 将EXCEL表格内容另存为图片的方法有很多种,简单的比如“复制为图片格式并另存”,“打印成XPS”等等,本文着重的是利用VBA实现的方法。 该方法适合用于中大型图文表格输出为图片格式,方便传阅,在office2010及以上版本最为流畅。 具体看代码: Sub printA4() Dim rng As Range '定义截图范围变量 'm = 20... 阅读详情

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Java中提供了各种各样的运算符,如算术运算符:+、-、*、/表示加、减、乘、除四则运算,取模运算"%",以及其他自增、自减运算符等。本篇文章中要介绍的则是位运算符。

一、Java中的进制

在Java中,对于整数的表示有四种形式:

  • 二进制:只用0,1表示,满2进1,以0b或者0B开头(进制符号中不区分大小写)。
  • 十进制:用数字0-9表示,满10进1,也是最常见的表示形式。
  • 八进制:用数字0-7表示,满8进1,以数字0开头(很容易混淆,不建议使用)。
  • 十六进制:用数字0-9和字母A(10)-F(15)表示,满16进1,以0x或者0X开头。
public class BinaryDemo1 {
    public static void main(String[] args) {
        //二进制: 5
        int num1 = 0b0101;
        //十进制: 100
        int num2 = 100;
        //八进制:8
        int num3 = 010;
        //十六进制:10
        int num4 = 0xA;
    }
}

二、原码、反码、补码

2.1 原码

在计算机中,原码是对数字的二进制定点表示,数值的最高位是符号位:对于正数,该位是0;对于负数,该位是1。正数1和负数-1的原码示例如下。(Java中int整型数据长度为4个字节,每个字节为8个bit位,即32bit位)
在这里插入图片描述
原码是最简单的编码方式,便于输入输出。但是原码并不能直接参与运算,否则可能就会出现错误的计算结果。例如,1和-1求和是0,但是如果使用原码计算则计算结果并不是0,如下所示:
在这里插入图片描述
则该原码表示的计算结果为-2。

2.2 反码

上述已经说到原码并不能直接参与计算,真正参与计算的实际是补码(下一节将会介绍),反码通常是由原码转为补码的一种过渡码,其转换规则如下:

  1. 对于正数来说,原码、反码相同。
  2. 对于负数来说,符号位不变,其他位依次取反。

例如,求整数-1的反码如下:
在这里插入图片描述

2.3 补码

在计算机运算的时候,都是按补码的形式来运算。转换规则如下:

  1. 对于正数来说,原码、补码相同(正数的原码、反码、补码都是一样的)。
  2. 对于负数来说,补码=反码+1,反码=补码-1.

例如,求-1的补码如下:
在这里插入图片描述
在2.1节中展示了使用原码直接参与计算可能会出现计算结果异常,现在使用补码来求和1和-1(1是正数,补码和原码相同,-1的补码如上述所示),补码计算示例如下:
在这里插入图片描述
此时计算结果补码表示0,对于0来说,其原码、反码、补码都是0,故使用补码进行计算未出现计算结果异常(感觉这个例子有点特殊了,总而言之,计算机底层运算时使用补码进行计算,计算完成后再转为原码表示计算结果)。

三、位运算符

Java中没有无符号数,即Java中的数都是有符号的。在Java中,一共提供了7种位运算符,以下分别来介绍这些位运算符。

3.1 按位与

Java中,按位与的位运算符为"&",表示两位全为1时结果为1,否则为0。例如,计算2&3:

public class BinaryDemo2 {
    public static void main(String[] args) {
        int num1 = 2;
        int num2 = 3;
        //按位与运算
        System.out.println("2 & 3 = " + (2 & 3));
    }
}

在这里插入图片描述
上述已经说明,底层运算时都是使用补码计算,2&3补码运算如下:
在这里插入图片描述

3.2 按位或

在Java中,按位或的位运算符为"|",表示至少其中一个为1,结果为1,否则为0。计算2|3如下:

public class BinaryDemo2 {
    public static void main(String[] args) {
        int num1 = 2;
        int num2 = 3;
        //按位与运算
        System.out.println("2 | 3 = " + (2 | 3));
    }
}

在这里插入图片描述
补码运算如下:
在这里插入图片描述

3.3 按位取反

Java中按位取反的位运算符为"~",表示如果是1,结果是0,如果是0,结果为1。例如,整数2按位取反计算:

public class BinaryDemo2 {
    public static void main(String[] args) {
        int num1 = 2;
        //按位与运算--> -3
        System.out.println("~2 = " + (~2));
    }
}

补码计算:
在这里插入图片描述

3.4 按位异或

Java中按位异或的位运算符为"^",表示其中一个为0,一个为1时结果为1,否则为0。例如,计算2异或3:

public class BinaryDemo2 {
    public static void main(String[] args) {
        int num1 = 2;
        int num2 = 3;
        //按位与运算
        System.out.println("2 ^ 3 = " + (2 ^ 3));
    }
}

在这里插入图片描述
在这里插入图片描述

3.5 算术右移

Java中算术右移的位运算符为">>",运算规则为低位溢出,符号位不变,并且使用符号位补溢出的高位。例如,4>>1计算如下:

public class BinaryDemo2 {
    public static void main(String[] args) {
        int num1 = 4;
        int num2 = 1;
        //按位与运算
        System.out.println("4 >> 1 = " + (4 >> 1));
    }
}

在这里插入图片描述
4>>2计算如下:
在这里插入图片描述
实际上,对于算术右移来说,右移n位即相当于数值除以2^n次方。4算术右移2位补码运算如下:
在这里插入图片描述
结果即为1。

3.6 算术左移

Java中算术左移的位运算符为"<<",计算规则为符号位不变,低位补0。例如计算1<<2如下:
在这里插入图片描述
计算1<<3如下:
在这里插入图片描述
跟算术右移相反,算术左移n位等于数值乘以2^n次方。1<<2补码运算如下:
在这里插入图片描述

3.7 逻辑右移

Java中逻辑右移的位运算符为">>>",逻辑右移也称为无符号右移,计算规则为低位溢出,高位补0。例如,计算3>>>2如下:
在这里插入图片描述
对应补码运算如下:

在这里插入图片描述
在Java中,没有逻辑左移的位运算符"<<<“。对于C/C++来说,不能保证”>>“是完成了算术移位即扩展符号位还是逻辑移位即填充0,即C/C++的”>>"运算符对于负数得到生成结果可能会依赖于具体实现,但是Java中则消除了这种不确定性。


总结

本次回顾的知识点主要是JavaSE中的位运算符相关的内容,这部分内容在工作中需要使用则适当使用即可,并不需要做过多的深入了解。(ps:突然发现写博客是一种非常不错的知识复习方式)

CiteSpace基础操作(CNKI数据的导入分析)(一) 1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索 阅读详情

相关推荐

Upload Symbols Failed:The archive did not include a dSYM for the LiveKitWebRTC.framework with the UU

你需要从源码构建 LiveKitWebRTC,而不是使用 CocoaPods 安装的预编译 .xcframework。Step 2: 修改 Podfile 使用本地路径引用(不是从源下载的 xcframework)方法 :强制从源码构建 LiveKitWebRTC.framework(推荐)这样它就会编译 WebRTC 并带上正确 UUID 的 dSYM。替换路径为你 clone 下来的 LiveKit 源码位置。Step 1: 克隆源码仓库。

baidu_40537062的博客 2138

记录,Java中~运算符(按位取反)

在java中,~运算符(位非运算符)表示的是对操作数进行按位取反(包括符号位),就是对操作数每一位都进行取反。 计算时,要特别注意,由于在计算机中,存储数据存的是它的补码,所以手动计算时要用补码进行计算,最后再转化为原码,才是我们能看见的数字(result)。 例如: 计算~8. class haha { public static void main(String[] args) { int a = 8; Sy...

Adam_ZQ的博客 4632

脑机接口技术介绍、应用与挑战

脑机接口的概念最先于1973年提出,伴随着计算机性能的飞速提高,在美国“人类脑计划”的资金支持下,脑机接口的研究进入了高速发展期。去年年末,我国科技部会议透露:中国将拿出540亿元,推进中国脑计划的发展。同时,这一举措也推动了我国脑机接口的研究发展。 脑机接口属于多学科交叉科技,涉及神经科学、计算机科学、认知科学、控制与信息科学技术、医学等多个学科。技术实现方式是通过信号采集设备从大脑皮层采集脑电信号,经过放大、滤波、A/D转换等处理,转换为可以被计算机识别的信号,然后对信号进行预处理,提取特征信号,再利

weixin_44603934的博客 9132

Java中的按位取反操作符(~)

Java中的按位取反操作符(~)

听海边涛声 2003

基于光电传感的非接触式酒精浓度检测系统设计与实现

本文详细介绍了基于光电传感技术的非接触式酒精浓度检测系统设计与实现。系统利用940nm红外LED和OPT101光电传感器,结合朗伯-比尔定律,通过STM32微控制器进行信号采集与处理,实现了快速、准确的酒精浓度测量,测量精度达±1%,适用于工业检测和便携式应用场景。

y7z8a的博客 365

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

Java按位取反操作~

计算机存储的整型数据是存储的2进制,而此2进制并不是此10进制数直接对应的2进制数(原码),而是存储的此2进制数的补码。所以,取反(~)是对补码的按位取反操作,而要从原码转换成补码,必须要先从原码转换成反码,再从反码转换成补码才可以。注意:2进制的最高位是符号位(在最左侧)

James-Tom的博客 2298

构建企业级AI税务顾问:优化税收策略与合规

本文深入探讨了构建企业级AI税务顾问的重要性及其在实际应用中的价值。通过分析当前税务领域的挑战和问题,本文详细介绍了AI税务顾问的基本原理、技术架构、核心功能以及实践应用。文章以逐步分析的方式,从背景介绍、核心概念与联系、算法原理讲解、系统分析与架构设计、项目实战到最佳实践与展望,系统性地展示了如何利用AI技术优化税收策略并确保税务合规。文章旨在为企业和税务从业者提供实用的指导,推动AI在税务领域的创新与发展。在当前全球经济一体化的背景下,企业面临着越来越复杂的税务环境。首先,税收法规的复杂性日益增加。

AI天才研究院 1157

java位反_JAVA位运算之按位取反

一直纠结于位运算中的 按位取反 以及原码、反码、补码之间的各种关系,反正各种混淆各种懵逼。经过一小段时间才弄明白这个别人觉得很容易的问题。可能还是我基础不太好。位运算是对操作数以二进制为单位的进行的运算,位运算符则用于位运算。位运算符包括&(按位与)、|(按位或)、^(按位异或)、~(按位取反)等等...位运算符操作数可以是整型或字符型,结果为整型。按位取反是对补码进行运算,当运算完后,再...

weixin_35015064的博客 2741

AMDGPU IH(Interrupt Handler)实现分析

AMDGPU IH环形缓冲区机制是显卡驱动中高效处理GPU硬件中断的核心架构。该机制通过环形缓冲区存储中断事件,利用读写指针(wptr/rptr)同步硬件与驱动间的数据交互。硬件写入事件后驱动遍历处理,通过指针掩码实现环形循环,并具备溢出检测和虚拟化环境下的重置保护。其优势在于批量处理降低中断开销,指针同步确保可靠性,支持多队列扩展和SR-IOV虚拟化场景,为GPU中断管理提供了高性能基础架构。

图形/计算GPU的驱动与虚拟化技术分享园地 1640

从0到全栈:C#/.NET/.NET Core终极学习路线——2025年开发者必修的12个阶段与30个实战项目

【代码】从0到全栈:C#/.NET/.NET Core终极学习路线——2024年开发者必修的12个阶段与30个实战项目。

墨夶的博客 2042

java 位运算 取反_Java 位运算符

Java位运算符(bitwise operators),应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)。位运算符作用在所有的位上,并且按位运算。假设a = 5,b = 12;它们的二进制格式表示将如下:A = 0101B = 1100-----------------A&B = 0100A | B = 1101A ^ B = 1...

weixin_39591455的博客 709

跨平台也要跑得像原生一样顺:SAP GUI for Java 的安装、配置、运维与自动化实战

摘要:SAP GUI for Java 作为跨平台客户端解决方案,在 S/4HANA 时代仍发挥关键作用,特别适用于 macOS/Linux 环境下的 ABAP 开发和系统运维。其主要优势包括:平台无关性(支持 Windows/macOS/Linux/UNIX)、与 Windows 版本一致的交互体验、对核心事务码(如 ST22/SM21)的完整支持。版本管理需注意 7.80 已停止支持,建议升级至 8.10。安装支持原生包和通用 JAR 两种方式,推荐团队标准化版本和连接配置(通过 SAP UI Land

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 680

【JavaSE】【计算机系统基础】原码、反码、补码及位运算详解(重点)

本文讲述了原码、反码及补码的内容,并详细介绍了Java中的位运算,采用例题解析的方式帮助大家理解本质。文章的最后,讲述了为什么计算机运算采用补码的方式。

黄小黄的博客 1209

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

JavaSE逻辑运算,位运算,三元运算符(面试题)

本文介绍了Java中的逻辑运算和位运算。逻辑运算包括与(&&)、或(||)、非(!)三种基本操作,其中&&和||具有短路特性。位运算部分讲解了按位与(&)、或(|)、异或(^)、非(~)四种运算符,以及左移(<<)和右移(>>)操作。文章还提供了代码示例,演示了逻辑运算的短路特性,并通过位运算实现了2*8的高效计算(2<<3)。最后简要介绍了三元运算符的用法。这些运算符在Java编程中常用于条件判断和二进制操作。

2401_87998907的博客 1005

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JavaSE基础语法—位运算

位运算 public class Test02{ public static void main(String[] args){ /** 位运算:& | ^ << >> >>> byte b1 = 27;//0001,1011 ...

weixin_30481087的博客 104

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

javaSE 位运算练习题

位运算规则 : 有符号右位移左边补符号位,正数补0 ,负数补1 无符号右移左边补0 按位与 & 有0 则0 按位或 | 有1则1 按位异或 ^ 不同则1 相同则 0 总:右移一位除以2,左移一位乘以2 1、不用临时变量交换两个整数 int n=2;//0010 int m...

iQian²的博客 508

JavaSE学习笔记_位运算

Java SE 基础学习笔记

qq_44791542的博客 468

javaSE基础-位运算符示例

运算符 左移 << 比如:3 << 2 = 12 即 3*2^2 = 12 Int类型(整数)在内存中占4字节 int类型 内存表示 说明 3 0000-0000 0000-0000 0000-0000 0000-0011 12 0000-0000 0000-0000 0000-0000 0000-1100 << 2,整体左移两位补0,长出的丢弃 运算符 右移 >> 比如:6 >> 2 = 1 即 6/2^2 = 1

qq_42019139的博客 244

javaSE_基础(位运算符)

一、位运算符符号说明例子&gt;&gt;右移System.out.println(9&gt;&gt;2);// 20 00001001 -&gt; 0 00000010&gt;&gt;&gt;无符号右移System.out.println(-9&gt;&gt;&gt;2);// 1073741821&lt;&lt;左移空出位补0System.out.println(9&lt;&lt;2);

子龙修仙的博客 261

Javase学习10-位运算符

Javase学习10-位运算符 位运算符本质都是针对二进制数0和1进行运算的,在使用位运算符时,会先将操作数转换成二进制进行位运算,再将结果转换成想要的进制数。1表示true,0表示false 须知: 负数在内存中是以补码的形式存储的 负数的二进制数就是该负数对应正数的源码全部取反加1得到的补码 原码: 00011110 反码: 11100001 补码: 11100010 负数的源码就是补码除符号位外全部取反加1 补码:11110011 反码:10001100 原码:10001101 一、位

TSCCG的博客 211

javaSE基础_位运算及位移运算

源码: public static void main(String[] args) { //位运算 int a=~2;//按位取反:所有位都取反(包括符号位) 答案:-3 print("~2="+a); int b=2&3;//按位与:两位都为1时,结果为1

紫竹blog 1925

第四章、JavaSE专题之进制&位运算详述

进制介绍&位运算

qq_27924553的博客 297

JavaSE 学习参考:位运算符

Java位运算符有:&按位与,|按拉或,^按位异或,~按位取反,>右移位,>>>右移位。下面以23和11作为操作数来演示:   运算符 规则 十进制 二进制 &按位与 两个操作数的二进位都为1结果为,否则为0 23 0001 0111 11 0000 1011

bwf_erg的博客 232

JavaSE-04_1位运算

/* A= 0011 1100 B= 0000 1101 ----------------- A&B = 0000 1100 //两个1则为1,否则为0 A|B = 0011 1101 //有1则为1,否则0 A^B = 0011 0001 //两个值相同为0,不同为1 ~B = 1111 0010 //取反 2*8=16 2*2*2*2 << *2 //向左位移 >> /2 //向右位移 0000 0000 0 0000 0001 1 0000 001

CCPBlog的博客 154
上一篇: 基于Socket实现的Java聊天小项目
下一篇: Java并发编程-CAS
Zzzkt
博客等级 码龄7年 149粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值