java 右移两位_java左移右移运算符
http://blog.csdn.net/dandanteng/article/details/7433531
首先要明白一点,这里面所有的操作都是针对存储在计算机中中二进制的操作,那么就要知道,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。
左移位:<
左移操作时将运算数的二进制码整体左移指定位数,左移之后的空位用0补充
右移位:>>,有符号的移位操作
右移操作是将运算数的二进制码整体右移指定位数,右移之后的空位用符号位补充,如果是正数用0补充,负数用1补充。
例子:
public static void main(String[] args)
{
System.out.println(3<<2);//3左移2位
System.out.println(-3<<2);//-3左移2位
System.out.println(6>>2);//6右移2位
System.out.println(-6>>2);//-6右移2位
}
输出结果
12
-12
1
-2
下面解释一下:
00000000 00000000 00000000 00000011 +3在计算机中表示
00000000 00000000 00000000 0000001100 左移2位,补0,结果为12
----------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000011 +3在计算机中表示
11111111 11111111 11111111 11111100
11111111 11111111 11111111 11111101 -3在计算机中表示
11111111 11111111 11111111 1111110100 左移2位,补0,结果为负数,就是补码了,求原码
10000000 00000000 00000000 00001011
10000000 00000000 00000000 00001100 结果-12
----------------------------------------------------------------------------------------------
这也说明了一个问题:在计算机中,以1开头的就是补码的形式,是负数。
00000000 00000000 00000000 00000110 +6在计算机中表示方法
0000000000 00000000 00000000 00000110 右移两位,正数补0,结果为1
----------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在计算机中的表示
1111111111 11111111 11111111 11111010 右移两位,结果为负数
1000000000 00000000 00000000 000001
1000000000 00000000 00000000 000010 结果为-2
这个地方很容易弄混,多想几次就会慢慢理解了。
上面解释了带符号的移位操作,下面解释一下不带符号的移位操作
无符号的移位只有右移,没有左移使用“>>>”进行移位,都补充0
例如:
public static void main(String[] args)
{
System.out.println(6>>>2);
System.out.println(-6>>>2);
}
结果:
1
1073741822
分析:
00000000 00000000 00000000 00000110 +6在计算机中表示方法
0000000000 00000000 00000000 00000110 右移两位,正数补0,结果为1
-----------------------------------------------------------------------------------------------------
00000000 00000000 00000000 00000110 +6在计算机中表示方法
11111111 11111111 11111111 11111001
11111111 11111111 11111111 11111010 -6在计算机中的表示
0011111111 11111111 11111111 11111010 右移两位,补充0,结果为1073741822
可以参考
移位操作要注意的问题是高(低)位是补0还是补1和对char, byte, short型的操作:
(1)<< : (left-shift), 最低位补0
(2)>> : (signed right-shift), 右移过程使用符号位扩展(sign extension),即如果符号为为1则高位补1, 是0则补0,也就是逻辑右移
(3)>>> : (unsigned right-shit),右移过程使用零扩展(zero extension),即最高位一律补0,也就是算术右移
(4)移位操作的数据类型可以是byte, char, short, int, long型,但是对byte, char, short进行操作时会先把它们变成一个int型,最后得到一个int型的结果,对long型操作时得到一个long型结果,不可以对boolean型进行操作。
(5)移位操作符可以和=合并起来,即 <<= 、 >>= 和 >>>=。例如 a >>= 2; 表示将a右移两位后的值重新赋给a。当时在使用这三个操作符对 byte, char, short型数据进行操作时要注意,例如有一下代码片段:
public class ShiftTest
{
public static void main(String [] args)
{
byte a;
byte b;
byte c;
a = 127;
b = 127;
c = 127;
a <<= 2;
System.out.println(a);
System.out.println(b <<= 2);
System.out.println(c <
}
}
运行结果是:
-4
-4
508
这说明了在操作a <<= 2 执行过程是这样的:先将 byte型的数 127变成int型,左移2位得到 508,然后把508赋给byte型变量a时只是简单地"折断"(truncate)得到数-4。编译时编译器不会提示你可能损失精度(实际上在本例中确实是损失精度了),但是如果你把a <<= 2改成 a = a << 2;编译器就会提示可能损失精度了。
================================================================================
移位操作的简单计算方法
>>右移操作
x>>y
就是x除以2的y此方,取整数
<
X<
就是x乘以2的y次方
java 右移两位_java左移右移运算符相关推荐
- java中的 31 和左移右移的关系简述
java中的 31 和左移右移的关系简述 任何数乘以31 等于 这个数左移 五位 减去这个数 n * 31 == (n << 5) - n " << " ...
- 字符串右移n位,例如 “hello world“ 右移两位 后ldhello wor 要求写一个方法实现此功能,方法的格式是 String moveToRight(String str,int po
字符串右移n位,例如 "hello world" 右移两位 后ldhello wor 要求写一个方法实现此功能,方法的格式是 String moveToRight(String s ...
- java保留两位小数_java使double保留两位小数的多方法 java保留两位小数
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧 mport java.text.DecimalFormat; DecimalFormat df = new Decima ...
- java中想要保留2位小数_java使double保留两位小数的多方法 java保留两位小数
mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); do ...
- java保留二位小数_java使double保留两位小数的多方法 java保留两位小数
复制代码代码如下: mport java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00& ...
- java保留两位小数怎么_java保留两位小数4种方法
java保留两位小数4种方法 Java中保留小数有四种方法,如下: public class Format { double f = 23065.57845; public void m1() { B ...
- java最多保留两位小数_java使double保留两位小数的多方法 java保留两位小数
这篇文章主要介绍了java使double类型保留两位小数的方法,大家参考使用吧mport java.text.DecimalFormat; DecimalFormat df = new De ...
- java保留两位小数
2019独角兽企业重金招聘Python工程师标准>>> java保留两位小数 博客分类: java java保留两位小数问题: 方式一: 四舍五入 double f = ...
- 使double保留两位小数的多方法 java保留两位小数
import java.text.DecimalFormat; DecimalFormat df = new DecimalFormat("######0.00"); double ...
最新文章
- POCO:InvalidOperationError:Mapping and metadata information could not be found for Entity Type
- 【已完结!】Java基础--学习笔记(零起点打开java世界的大门)--博客汇总表【附:视频、工程源码、资料、详细笔记】
- 《JavaScript入门经典(第4版)》上第5章一个实例程序的修正,完善
- 最为完整的gdb调试
- java.lang.ClassNotFoundException: org.springframework.web.util.WebAppRootListener
- 基于C#的在线语音识别软件开发
- C/C++ 二维数组传参方法总结
- Twitter是什么软件?哪个国家的?怎么使用?免费吗?
- ui设计需要做android和苹果版本,安卓和IOS系统对于UI设计来说一样吗
- echarts中月份数据缺少怎么补齐呢?
- Linux服务器下搭建SFTP服务
- Mysql时间函数用法
- SpringMVC返回数据到页面的方法
- LayaAir基础(7) 之 .ani动画文件
- android复读机功能,点滴复读机最新版-点滴复读机app下载v3.0.1 安卓版-腾牛安卓网...
- JavaScript------JS相关难题,做对一半算你牛牪犇
- SMETA验厂辅导,提出过不合规项的所有部分,应对以下内容有清楚的解释
- AirDisk产品Q3C和T2硬盘不认的时候,一般就三种原因
- 刘汝佳 例题7-2 最大乘
- 2021年中国航空飞机数量、航空器数量及航空维修主要企业经营对比分析[图]
热门文章
- C#与时间有关的一些方法
- 配置apache虚拟主机
- Winform将网页生成图片
- javaweb学习总结(四十三)——Filter高级开发
- SQL Server 动态生成数据库所有表Insert语句
- memcached协议
- windows2008下 IIS7 HTTP 错误 404.2 - Not Found 解决方法(图文)
- 鸿蒙自研系统,华为已注册“华为鸿蒙”商标,自研操作系统最快秋季发布
- java 交互输入_JAVA -----------交互式程序
- 打开黑色_表哥出差带回来一箱苹果,打开后发现是黑色的,大家表示都没见过...