java右移位_java、、移位操作方法
<
int leftShift = 10;
System.out.println("十进制:" + leftShift + ", 二进制:" + Integer.toBinaryString(leftShift));
int newLeftShift = letfShift << 2;
System.out.println("左移2位后十进制:" + newLeftShift + ", 左移2位后二进制" + Integer.toBinaryString(newLeftShift)); //正整数x左移n位后的十进制结果,x = x * 2^n
以上是正整数,运算结果如下。
接下来看看将负数进行左移2位操作是什么情况,运算结果如下。
为什么会-10的二进制会出现这么多的1呢?仔细数一下刚好有32位。首先需要了解的是Java负数存储是以补码形式存储的(补码=反码+1),10的二进制是1010,它的反码就是0101,再加1就是补码0110。那为什么会多出来那么多1呢?这是因为int型在Java中占8个字节,刚好32位,10原码的高位全是0,它的反码自然高位就变成了1。所以整体左移2位,低位以0补齐,最后的运算结果就是x = (|x| + 2^n)。
>>,有符号右移位,将运算数的二进制整体右移指定位数,整数高位用0补齐,负数高位用1补齐(保持负数符号不变)。
int rightShift = 10;
System.out.println("十进制:" + rightShift + ", 二进制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >> 2;
System.out.println("右移2位后十进制:" + newRightShift + ", 右移2位后二进制" + Integer.toBinaryString(newRightShift)); //右移n位后的运算数x十进制结果,x = x / 2
以上是正整数,运算结果如下。
接下来看看将负数进行右移2位操作是什么情况,运算结果如下。
负数的有符号右移基本原理还是和左移相同,不同的是结果的计算,因为这是有符号的右移,一直右移最后的结果就会是-1。归纳起来就是,如果运算数是偶数,那么它的运算结果就是 x = -(|x| / 2),如果运算数是奇数,那么它的运算结果就是 x = -(|x| / 2) - 1。
>>>,无符号右移位,不管正数还是负数,高位都用0补齐(忽略符号位)
先看正数,正数的>>>无符号右移位和>>有符号右移位计算结果相同
int rightShift = 10;
System.out.println("十进制:" + rightShift + ", 二进制:" + Integer.toBinaryString(rightShift));
int newRightShift = rightShift >>> 2;
System.out.println("右移2位后十进制:" + newRightShift + ", 右移2位后二进制" + Integer.toBinaryString(newRightShift)); //右移n位后的云算数x十进制结果,x = x / 2
以上是正整数,运算结果如下。
接下来看负整数,运算结果如下。
虽然无符号移位后的二进制和有符号移位后的二进制看起来相同的,但结果大相径庭,记住有符号右移位操作,实际上是忽略符号的算术操作,即高位统一补0。
以上这篇java<>、>>>移位操作方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
java右移位_java、、移位操作方法相关推荐
- java右移位_java 、移位操作方法
< java" id="highlighter_505373"> 以上是正整数,运算结果如下. 接下来看看将负数进行左移2位操作是什么情况,运算结果如下. 为 ...
- java右移位_java移位运算符详解
java 移位运算符不外乎就这三种: << (左移). >> (带符 号右移)和 >>> (无符号右移) 1 . 左移运算符 左移运算符 << 使 ...
- java右移位_java中的移位运算符:,,总结
java中有三种移位运算符 << : 左移运算符,num << 1,相当于num乘以2 >> : 右移运算符,num >& ...
- java右移位_java中的左移 右移
1. 左移运算符 左移运算符< 1)它的通用格式如下所示: value << num num 指定要移位值value 移动的位数. 左移的规则只记住一点:丢弃最高位,0补最低位 如果 ...
- java set 包含_Java Set.contains()方法:判断Set集合是否包含指定的对象
Java 集合类中的 Set.contains() 方法判断 Set 集合是否包含指定的对象.该方法返回值为 boolean 类型,如果 Set 集合包含指定的对象,则返回 true,否则返回 fal ...
- java 发送邮件 菜鸟_Java发送邮件的方法
1.需要的jar包 2.具体实现方法 1.设置邮箱主机.需要认证.邮箱协议 Properties pro=new Properties(); pro.setProperty("mail.ho ...
- java secretkey用法_Java SecretKeyFactory.generateSecret方法代码示例
本文整理汇总了Java中javax.crypto.SecretKeyFactory.generateSecret方法的典型用法代码示例.如果您正苦于以下问题:Java SecretKeyFactory ...
- java 虚函数_Java的虚方法
虚方法出现在Java的多态特性中, 父类与子类之间的多态性,对父类的函数进行重新定义.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding).在Java中,子类 ...
- java post 发送_Java发送post方法详解
总结一下java使用http发送post的方法: 1.post请求用于发送json 格式的参数: /** * post请求(用于请求json格式的参数) * * @param url 地址 * @pa ...
最新文章
- python scrapy菜鸟教程_scrapy学习笔记(一)快速入门
- android 调用java webservice_android通过ksoap2调用java写的CXF 的webservice
- 标准配置的UBUNTU 11.10 RUBY VMWARE 镜像,手工MOD(ZSH_RVM_RAILS_VIM)
- spring webscoket服务端使用记录
- CSS块元素与内联元素(转)
- 5.SOA架构:服务和微服务分析及设计--- REST服务建模过程
- 事务对性能影响_mysql之事务
- 函数式编程基础---高阶函数和偏函数
- 基于51单片机的红外遥控器设计
- python3处理普通文件【open内置函数】
- python操作 docx
- tensorflow识别水果
- LabelImg 标注 yolo 数据 环境配置和预制标签 predefined_classes.txt 的使用 详解
- android 提高启动速度慢,安卓启动速度过慢的原因及解决方法
- 手机服务器 微信QQ,玩家天价买服务器语聊开黑 小白没想明白:微信QQ难道不行?...
- MySql 的操作日志 历史记录
- 【HBase】HBase入门详解(一)
- Python Tkinter - WiFi WL Test 上位机 (自动搜索Uart、执行exe/Bat)
- 用VBS代码写PPT/PPTX批量转PDF,绝对可用,本人就在用着……ppt转pdf代码
- 无线式PT二次回路压降测试仪(SXP-W4m)操作程序
热门文章
- InfoQ趋势报告:架构和设计领域技术演变详解
- CentOS安装新版RabbitMQ解决Erlang 19.3版本依赖
- spring读取配置文件的几种方式
- 《爱情公寓2》将播 恶搞宣传片大喊“有种别看”
- 软工作业 5:词频统计——增强功能
- Koa2和Redux中间件源码研究
- 6位技术大咖11月倾心巨献,大数据+安全主题的技术分享合集【阿里云MVP 干货集锦】...
- 全国首个窄带物联网实验局落户福州 助力智慧城市建设
- Android Broadcast Receiver
- Keepalived Nginx 高可用性配置