Java学习手册:无符号左移&无符号右移&有符号右移

java面试2 1 java中右移和无符号右移的区别 右移>> :该数对应的二进制码整体右移,左边的用原有标志位补充,右边超出的部分舍弃。 无符号右移>>> :不管正负标志位为0还是1,将该数的二进制码整体右移,左边部分总是以0填充,右边部分舍弃。 2 double和Double分别占用几个字节 计算方式: 对象头+实例数据+对齐填充 类型 64位(无压缩) boolean 1 byte 1 short 2 char 2 int 阅读详情

一、无符号右移“>>>”与有符号右移“>>”

Java提供了两种右移运算符:“>>” 和">>>"。其中,“>>”被称为有符号右移运算符,“>>>”被称为无符号右移运算符,它们的功能是将参与运算的对象对应的二进制数右移指定的位数。二者的不同点在于“>>”在执行右移操作时,若参与运算的数字为正数,则在高位补0;若为负数,则在高位补1。而“>>>”则不同,无论参与运算的数字为正数或为负数,在执运算时,都会在高位补0。

此外,需要注意的是,在对char、byte、short等类型的数进行移位操作前,编译器都会自动地将数值转化为int类型,然后才进行移位操作。由于int型变量只占4Byte(32bit),因此当右移地位数超过32bit时,移位运算没有任何意义。所以,在Java语言中,为了保证移动位数地有效性,以使右移的位数不超过32bit,采取了取余的操作,即a>>n等价于a>>(n%32)。


二、“<<”运算符与“>>”运算符

"<<"运算符表示左移,左移n位表示原来的值乘2的n次方,经常用来代替乘法操作。例如,一个数m乘以16可以表示为将这个数左移4位(m<<4),由于CPU直接支持位运算,因此位运算比乘法运算效率高。

与右移运算不同的是,左移运算没有有符号和无符号左移动,在左移时,移除高位的同时在低位补0。

与右移运算相同的是,当进行左移运算时,如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模,例如对int类型的数移动33位,实际上只移动了33%32=1位。


【Java】位运算符---算术右移和逻辑右移、算术左移和逻辑左移 文章目录1. 算术左移和逻辑左移2. 算术右移和逻辑右移3. Java中&lt;&lt;、&gt;&gt;和&gt;&gt;&gt;的含义 1. 算术左移和逻辑左移 对于有符号数或无符号数:算术左移 == 逻辑左移。 操作逻辑:丢弃高位,低位补0。 数值变化:左移n位,相当于乘以2的n次方。(对于无符号数、有符号数的正数或负数,均成立)。 2. 算术右移和逻辑右移 分类 算术右移 逻辑右移 注 无符号数 丢弃低位,高位补0 丢弃低位,高位补0 对于无符号数,算术右移 == 逻辑右移 有符 阅读详情

相关推荐

IGBT单管并联方案全解析:从均流设计到热管理实战技巧

本文深入解析了IGBT单管并联技术在新能源车电驱系统中的应用,重点探讨了均流设计与热管理实战技巧。通过优化寄生电感控制、动态均流和驱动电路设计,提升系统稳定性和效率,为工程师提供了一套完整的解决方案。

weixin_28720573的博客 438

编程语言——有无符号左右移位小见

本篇文章主要是自己对左右移位所学的心得,花了两个多小时,终于弄明白了,不敢私藏,故拿出来和大家分享,希望大家能更清楚地了解计算机语言移位操作。 进入正题前先了解几个概念: 1. 正负数符号位(最高位),正数为0,负数为1 2. 补码:正数的补码为其本身,负数的补码是其绝对值的原码最高位符号位不变,其它位取反,再加1,例如:8位的-1,其原码为1000 0001,其补码为1111 1110+1=...

NEU-JUN 1845

宝塔面板+pbootCMS建站全流程:从服务器选购到上线优化(附常见问题排查)

本文提供了一份详尽的宝塔面板与pbootCMS建站实战指南。内容涵盖从云服务器选购、宝塔面板部署与安全加固,到pbootCMS安装、权限配置、数据库连接等核心步骤。同时深入讲解了PHP环境优化、Nginx伪静态设置、缓存开启等性能与SEO优化技巧,并附有常见问题排查与后期维护建议,帮助用户高效、稳健地完成专业网站构建。

e4f5g6h的博客 659

关于位运算

位运算是对值的各个位进行操作,在前面的博客里关于原码、反码、补码的取值方式等都是对各个数据的位进行操作,C和C++中共有6种位运算符,分为两类:(1)移位运算符(2)逻辑按位运算符,在这里简单整理一下关于位运算的知识。 一、移位运算符 移位运算符分两个,左移运算符和右移运算符: 左移运算符:&lt;&lt; 左移运算符的语法为:val&lt;&lt;shift:其中val是要被操作的数值,shift是要移动的位数。这里以13为例。 例如对13进行左移3位,因为位运算符都是对数据的位进行操作,所以我们需要先将

qq_45132647的博客 901

CVAT本地部署保姆级教程:用Docker Compose在Ubuntu上5分钟搞定你的私有数据标注平台

本文提供CVAT本地部署的保姆级教程,详细讲解如何在Ubuntu系统上使用Docker Compose快速搭建私有数据标注平台。从环境准备、Docker配置到CVAT部署全流程,涵盖硬件要求、性能优化及安全加固等关键步骤,帮助开发团队5分钟内完成高效、安全的标注环境搭建。

weixin_42619742的博客 383

NVIDIA Jetson Orin Nano Super刷机避坑指南:从虚拟机配置到NVMe烧录实战

本文详细介绍了NVIDIA Jetson Orin Nano Super的完整刷机流程,涵盖虚拟机配置、SDK Manager安装、硬件连接、固件下载、rpcbind服务冲突解决以及NVMe烧录等关键步骤。重点解析了Super模式下的NVMe烧录命令参数和操作时机,帮助开发者高效完成刷机并避免常见错误。

y2z3a4b5c的博客 751

C语言中无符号数和有符号数的左移和右移

在单片机开发中,通常会使用左移和右移操作做快速的乘法和除法运算。 例如,将0x0001左移1位,相当于乘以2^1左移2位相当于乘以2^2,以此类推,左移n位,相当于乘以2^n。右移则相当于除以2^n。 那么对于无符号数和有符号数,对于左移和右移的操作分别是如何呢?下面通过实验来进行验证: 对于无符号数的左移和右移,代码片段如下: void main(void){ static UINT16 sTemp; sTemp = 0x0001; sTemp = sTemp

zj01jx的博客 1万+

CNN卷积神经网络手写数字识别实例及代码详解

本文的代码来自githup的Deep Learning的toolbox,是用Matlab实现的。感谢该toolbox的作者付出和分享。 我在应该该代码进行训练时,出现一些报错,如expand函数应用不对,flipall函数未定义等问题,对这些问题进行了修正,完成网络训练和验证。 本文mnist_uint8.mat的获取可以参照我的另一篇博客:MNIST数据库处理--matlab生成mnist_

VivienFu的专栏 6万+

Java中左移和右移运算符理解

1、&lt;&lt; :左移 左边最高位丢弃,右边补齐0 2、&gt;&gt; :右移 最高位是0,左边补齐0;最高为是1,左边补齐1 3、&gt;&gt;&gt;:无符号右移 无论最高位是0还是1,左边补齐0 //左移,向左移动几位就是乘以2的几次幂 //System.out.println(12 &lt;&lt; 1); //24 //System.out.println(12 ...

无极 3142

国家大地2000坐标系投影坐标转高德地图经纬度坐标-【高斯投影坐标】

国家大地2000坐标系投影坐标转换成高德经纬度坐标显示画图。

devil_zhuzhu的博客 1万+

UG NX二次开发(C#)-外部模式-批量删除某些图层中的体对象和曲线对象

在 UG NX中,有时需要批量删除某文件夹下多个.prt文件中固定一些图层中的体对象和曲线对象,这时如果采用手动逐个打开模型,并选择针对的图层删除,即耗时也容易遗漏,因此采用外部模式来处理比较方便。本文介绍批量删除某些图层中的体对象和曲线对象。

GimiGimmy 3035

java 位运算之无符号右移>>> 有符号右移>>

java 无符号右移>>> 有符号右移>>

Jaemon 5184

【第2章>第10节】深度学习DenseNet模型分析与matlab仿真

本文介绍了基于DenseNet深度学习模型的图像分类MATLAB实现方法。主要内容包括:1. DenseNet模型原理,详细解析了初始卷积层、密集块、过渡层等核心结构;2. 在MATLAB环境下完成DenseNet工具箱安装和测试样本准备;3. 实现图像预处理(统一缩放为224×224)、模型训练和测试的完整流程;4. 提供了混淆矩阵和准确率等测试结果分析。文章附带完整的MATLAB程序代码和操作视频教程,适合深度学习初学者快速掌握DenseNet模型的图像分类应用。通过实际测试,验证了该方案的有效性。

FPGA/MATLAB学习教程/源码/项目合作开发 330

Java中的左移、右移详细分析

&lt;&lt;表示左移,不分正负数,低位补0; 注:以下数据类型默认为byte-8位 左移时不管正负,低位补0 正数:**r = 20 &lt;&lt; 2**   20的二进制补码:0001 0100   向左移动两位后:0101 0000        结果:r = 80 负数:**r = -20 &lt;&lt; 2**   -20 的二进制原码 :1001 0100 ...

The best are water的博客 2万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

为什么右移有「有无」符号之别,而左移却没有?

在众多语言中,都提供了关于位操作符,但 **为什么右移有“有无”符号之别,而左移却没有?**,本文一步步讲述左移、有符号右移、无符号右移,以此来揭开位移的面纱,最终探究答案,囿于本人知识与能力,如有纰漏,敬请指出!

YopenLang的博客 2554

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

0x,左移,右移

0x代表的是十六进制,表示的是补码,默认为int类型,即32位,不足高位补0。 如:0xff=0x000000ff,每一位代表一个十六进制, -2表示的补码为1111 1111 1111 1111 1111 1111 1111 1110。十六进制为 0xfffffffe java 的&gt;&gt;为有符号又移,有符号右移就是右移之后,左边的补上符号位,正数补0,负数补1 &gt;&...

cjc000的博客 8194

Java左移、右移和无符号右移笔记

通过其它文章学习了Java左移和右移方面的知识,现在将几个博主写的文章进行整合起来,方便学习起来方便些。 一、原码、反码和补码 在开始java位运算的知识之前,我们先来了解几个基础的概念,原码,反码,补码。 1、原码 原码是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1,其余位表示数值的大小。 数值十进制5 [+5]=[00000101](原码) [ - 5]=[10000101](原码) 2、反码 反码..

night_iv的专栏 1706

java 无符号右移>>> 有符号右移>>

有符号右移&amp;amp;amp;gt;&amp;amp;amp;gt; 有符号右移就是右移之后,左边的补上符号位,正数补0,负数补1 无符号右移&amp;amp;amp;gt;&amp;amp;amp;gt;&amp;amp;amp;gt; 无符号右移就是右移之后,无论该数为正还是为负,右移之后左边都是补上0 左移&amp;amp;amp;lt;&amp;amp;amp;lt; 左移不区分有符号和无符号,都是左移之后右边补上0,最左边的符号位也直接移走 测试代码如下,直接看输出就能明白

sun%moon 1万+

java中左移、右移、无符号右移

java中负数表示方法:(绝对值取反码再加一) 计算机对有符号数(包括浮点数)的表示有三种方法:原码、反码和补码,补码=反码+1。在 二进制里,是用 0 和 1 来表示正负的,最高位为符号位,最高位为 1 代表负数,最高位为0 代表正数。     以java中8位的byte为例,最大值为:01111111,最小值为1000 0000。     那么根据十进制的数字,我们如何转换为二进制呢

bingjie1217的专栏 7907

java中的左移、右移、无符号右移

简明扼要总结用法,与原理

初心不忘、始终方得 1961

Java二进制-补码,左移,右移,无符号右移

一、二进制 二进制的最高位是符号位(整数是0,负数是1) Java中没有无符号数 计算机以整数的补码进行计算 原码:将一个整数转换为二进制 以int类型为例,int类型在Java中是4个字节,32位 例如: 2 的原码:00000000 00000000 00000000 00000010 -2的原码:10000000 00000000 00000000 00000010 反码 正数的...

Eamon 1897

java中移位运算<<左移 >>右移 <<<无符号右移 详解

java中移位运算&lt;&lt;左移 &gt;&gt;右移 &lt;&lt;&lt;无符号右移 详解 目录 java中移位运算&lt;&lt;左移 &gt;&gt;右移 &lt;&lt;&lt;无符号右移 详解 概念 代码举例 过程解释 &lt;&lt;左移 &gt;&gt;右移 &gt;&gt;&gt;无符号右移 实际应用 概念 &lt;&lt;:左移 左边最高位丢弃,右边补齐0 &gt;&gt;:右移 最高位是0,左边补齐0;最高为是1,左边补齐1 &gt;&gt;&gt;:无

一蓑烟雨任平生 1万+

java 无符号右移_java中的无符号移位运算

1. 无符号右移 &gt;&gt;&gt; 或&gt;&gt;&gt; =无符号右移(&gt;&gt;&gt;)跟右移(&gt;&gt;)运算符不一样。右移不改变数的正负。对于一个正数,无符号右移不会变成负数(相当于除以1再取整);但是对于一个负数,无符号右移会将负数变成正数;int i = -4;System.out.printf("%-10d %32s\n", i, Integer.t...

weixin_35492662的博客 5173

一篇文章让你学会Java之左移、右移操作

操作符名称功能符号右移二进制向右移,保留符号位,高位补符号位(正数补0,负数补1),相当于除以2的n次方。>>>无符号右移二进制向右移,高位总是补0,不考虑符号位。

Weiki的博客 2067

java中 >>带符号右移 >>>无符号右移 和 <<带符号左移的认识和理解

文章目录0.工具类代码1. &gt;&gt; 带符号右移运算符2.&gt;&gt;&gt; 无符号右移运算符3.&lt;&lt; 带符号左移运算符4. &lt;&lt;&lt; 无符号左移是不存在的 0.工具类代码 //二进制字符串转换为int型 public static int BinstrToIntArray(String binStr) { int result=0; char [] binCharArray=binStr.toCharArray(); fo

weixin_42988712的博客 1448

Java中二进制计算与&、或|、非~、异或^、左移<<、右移>>、无符号右移>>>

1、&amp;二进制与 2 &amp; 3 0B10 &amp; 0B11 =&gt; 0B10 =&gt; 2 2、|二进制或 2 | 3 0B10 &amp; 0B11 =&gt; 0B11 =&gt; 3 3、~二进制非 ~3 = ~ 0B00000000 00000000 00000000 00000011 = 0B11111111 11111111 11111111 11111100 取反之后变成了负数是补码表示 需要求其原码:补码的补码等于原码 =&gt; 0B10000000 0

彭世瑜的博客 2321
上一篇: Java学习手册:break&continue&return
下一篇: Java学习手册:Java中数组是不是对象
浩比浩比
博客等级 码龄12年 395粉丝 202原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值