学习移位运算,首先得知道参与移位运算的类型的位数,那先来复习下Java基础类型的占位数吧。

Java基础类型

Java基础类型总结一览表

类型

二进制位数

最大值

最小值

初始化值

表示形式

带符号

char

8

127(2^7-1)

-128(-2^7)

0

二进制补码

short

16

32767(2^15 - 1)

-32768(-2^15)

0

二进制补码

int

32

2,147,485,647(2^31 - 1)

-2,147,483,648(-2^31)

0

二进制补码

long

64

9,223,372,036,854,775,807(2^63 -1)

-9,223,372,036,854,775,808(-2^63)

0L

二进制补码

float

32

3.4028235E38

1.4E-45

0.0f

IEEE 754标准的浮点数

double

64

1.7976931348623157E308

4.9E-324

0.0f

IEEE 754标准的浮点数

boolean

待定分析

只有true 和false

只有true 和false

false

JVM中用0/1表示

float和double的区别在于一个是单精度的浮点数,一个是双精度的浮点数。

浮点数是机器内部的指数型的一种表示,可以分解为四个部分:数符号,尾数,指数符号,指数

数符号位和指数符号位都是占一位,表示正负。

对于float,指数部分占8位,其中指数符号一位,指数值部分占7位,尾数部分占24位;对于double,指数部分占16位,指数部分占15位,尾数部分占48位。所以double比float表示的数更大更精准,但与此同时带来的是两倍的内存消耗。

boolean占多数位的问题要看情况而论,再JVM中,对布尔值的操作都是替换成int型了,所以是占用32位;如果定义的是布尔型的byte数组,则JVM将其编译为byte数组类型,这时候占用了8位。其实这里也听疑惑的,为啥一个boolean可以一会占8位,一会占32位呢?个人理解感觉是在真正表示boolean的时候,应该都是只有1位,非0即1,但是具体编译的时候其他占用位可能是用来做其他用途。

好了,接下来,来看看移位运算的问题了。

Java的移位运算符包括三种:、>>(带符号右移)和>>>(无符号右移)。

左移运算符<<

用法:value << number

原则:丢弃最高位,低位补0

注意事项:char,byte和short型在移位时,会先转换为int型,然后再进行移位操作;

当移动位数超过移动数value的位数时,会做一个取模操作,例如45<<34,则具体移动时是移动2位,因为34%32=2。

实例:

1. 例子程序

public classTest {public static voidmain(String args[]) {int num =0x40000000;

System.out.println(num);

num= num << 1;

System.out.println(num);

}

}

2. 程序结果

1073741824

-2147483648

选取了一个典型用例,该例子说明,符号位也会连同一起移动,数字位如果为1且移动到了符号位,会将数变为负数。

带符号右移    >>

用法:value >> number

原则:符号位不变,左边依次补上符号位,且与此同时最低位要舍弃

注意事项:char,byte和short型在移位时,会先转换为int型,然后再进行移位操作;

当移动位数超过移动数value的位数时,会做一个取模操作,例如45<<34,则具体移动时是移动2位,因为34%32=2。

实例:

1. 例子程序

public classTest {public static voidmain(String args[]) {int num1 =0x80000000;int num2 = 0x00000003;

System.out.println(num1);

System.out.println(num2);

num1= num1 >> 2;

num2= num2 >> 1;

System.out.println(num1);

System.out.println(num2);

}

}

2. 运行结果

-2147483648

3

-536870912

1

num1说明了符号会跟着往右边跑,带符号移动。

num2说明了低位在舍弃,由3变为1了。

无符号右移    >>>

用法:value >>> number

原则:符号位不变,左边依次补上0,且与此同时最低位要舍弃

注意事项:char,byte和short型在移位时,会先转换为int型,然后再进行移位操作;

当移动位数超过移动数value的位数时,会做一个取模操作,例如45<<34,则具体移动时是移动2位,因为34%32=2。

实例:

1. 例子程序

public classTest {public static voidmain(String args[]) {int num1 =0x80000000;int num2 = 0x00000003;

System.out.println(num1);

System.out.println(num2);

num1= num1 >>> 1;

num2= num2 >>> 33;

System.out.println(num1);

System.out.println(num2);

}

}

2. 运行结果

-2147483648

3

1073741824

1

从num1可以看出符号位也当做数字位跟着一起移动了

java double 移位_【原创】Java移位运算相关推荐

  1. java double 类型_关于Java中的double类型数据

    在初学Java的时候,一般我们都会从基本的数据类型开始学习,而在基本数据类型中,我认为double类型是比较难理解的,并且在以后的学习或工作中,在double类型数据这遇到的坑也是极多的.例如下面的这 ...

  2. java图片叠加_[原创]JAVA中图片上叠加文字的方法

    --sunfruit JDK:1.3.x以上 功能:下面是一个简单在图片上面叠加文字的方法,有朋友如果有这方面的问题,就起个了解的作用 代码如下: import java.io.IOException ...

  3. java double相加_解决java中两个double类型的值相加

    代码: /** * 提供精确的加法运算 * @param v1 被加数 * @param v2 加数 * @return 两个参数的和 */ public static double add(doub ...

  4. java 反射创建对象并赋值_[原创] Java JDBC连接数据库,反射创建实体类对象并赋值数据库行记录(支持存储过程)...

    1 import java.lang.reflect.*;2 import java.sql.*;3 import java.util.*;4 5 public classSqlHelper {6 / ...

  5. 学JAVA的诗句_学Java有感(终)

    大一的下半学期逐渐步入尾声,我的Java学习也以告一段落.经过一个学期的学习,不能说是融会贯通,但也算小有心得.下面就来谈谈我对这个学期Java学习的感受吧! 在大一的上半学期,我接触到了一个计算机语 ...

  6. java 华氏度_在Java中将华氏度转换为摄氏温度[重复] - java

    This question already has answers here: Double value returns 0 [duplicate] (3个答案) 6年前关闭. 我正在尝试将华氏度转换 ...

  7. java 分割一个_分割java

    [java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...

  8. 用java编写计算器_用Java编写一个简单的计算器

    1.使用记事本或eclipse等编程工具,建立一个图形界面应用程序. 2.程序完成简单的四则计算功能 3.用户可以在名为Number1和Number2的文本输入框中输入2个操作数,然后点击下面的4个按 ...

  9. java初始化数据报_初始化java原因

    虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类 即虚拟机的类加载机制. 在Java中,类型的加载.链接 ...

  10. java 画笔粗细_用JAVA做个画笔,有画笔和橡皮功能就行。越简单越好

    展开全部 新建一个java文件,取名叫做PaintJava.java 代码如下: import java.applet.*; import java.awt.*; import java.awt.ev ...

最新文章

  1. ubuntu14.04中安装opencv2.4.13
  2. 关于Spring Boot你不得不知道的事
  3. Python分页组件
  4. MySQL调用存储过程
  5. 计算机学校推荐专科,专科计算机专业学校推荐
  6. ajax的核心有哪些,ajax的核心
  7. python import 文件路径_python之import子目录文件
  8. Python开发基础 day5 函数的定义与使用
  9. linuc和python常用命令是一样的么_Linux常用命令大全(非常全!!!)(2)|简明python教程|python入门|python教程...
  10. VS Code 新扩展,面向 Web 开发人员调试 DOM
  11. 数学 之 hdu 4710 Balls Rearrangement
  12. avs3 ts格式封装 标准_超能课堂(204):多媒体容器格式变迁录
  13. 推荐几位优秀的程序员和他们的公众号
  14. 2021-11-16-小甲鱼python教学视频总结
  15. Python 资源索引[绝对适合PYTHON人]
  16. 打造圣诞节H5游戏最强音
  17. 内网穿透工具-venom
  18. 网站收录查询,常用的2种网站收录查询方法
  19. 国际物流公司有哪些公司呢?
  20. luffcc项目-13-积分抵扣、发起支付、

热门文章

  1. Oracle 11g R2 Rman备份与恢复
  2. 外螺纹对照表_最新英制螺纹对照表(2016年完整版).
  3. Python贪吃蛇小游戏
  4. MediaExtractor、MediaMuxer 分离和合成 mp4
  5. 用matlab实现人脸识别,Matlab实现简单的人脸识别程序
  6. iShot--Mac最强截图工具
  7. 阈值分割python实现
  8. 十天学会单片机(4)数码管显示的原理,中断系统
  9. Python 网络爬虫第二讲
  10. 数学建模之排队论模型及代码