首页 > 编程 > Java > 正文

Java 位运算

2019-11-08 03:16:55
字体:
来源:转载
供稿:网友

简介

位运算是二进制运算。

java中基本数据类型: 这里写图片描述

这里包括了float和double两个浮点型,不予考虑,因为位运算是针对整型的。进行位操作时,除long型外,其他类型会自动转成int型,转换之后,可接受操作数长度为32。

byte和char进行移位运算时不会发生错误,并且均按照整型进行计算,当计算结果超出byte或是char所能表示的范围时则进行相应的转换(分别输出了结果-8和?)。

Java位运算对long、int、short、char和byte,位运算符具体如下表:

这里写图片描述

左移位(<<)

程序:

public class LeftMoving{ public static void main(String[] args){ System.out.PRintln("5<<3="+(5<<3)); }}

输出结果: 5<<3=40

计算过程: 0000 0000 0000 0000 0000 0000 0000 0101 ? 5 0000 0000 0000 0000 0000 0000 0010 1000 ? 40

右移位(>>)

正数

正数则高位补0。

程序:

public class PlusRightMoving{ public static void main(String[] args){ System.out.println("5>>1="+(5>>1)); }}

输出结果:

5>>1=2

计算结果:

0000 0000 0000 0000 0000 0000 0000 0101 ? 5 0000 0000 0000 0000 0000 0000 0000 0010 ? 2

负数

负数则高位补1。

程序:

public class NegativeRightMoving{ public static void main(String[] args){ System.out.println("-5>>1="+(-5>>1)); }}

输出结果:

-5>>1=-3

计算结果:

1111 1111 1111 1111 1111 1111 1111 1011 ? -5 1111 1111 1111 1111 1111 1111 1111 1101 ? -3

计算机,负数以其正值的补码形式表达。

无符号右移位(>>>)

程序:

public class UnsignedRightMoving{ public static void main(String[] args){System.out.println("-5>>>1="+(-5>>>1)); }}

输出结果:

-5>>>1=2147483645

计算过程:

1111 1111 1111 1111 1111 1111 1111 1011 ? -5 0111 1111 1111 1111 1111 1111 1111 1101 ? 2147483645

位运算中的操作数

在进行移位运算时要注意整型和长整型在内存中的位数(整型是32位,长整型是64位),如果移位操作数超出了该位数则取模计算,例如:int型数据是32位的,如果左移35位是什么结果?

程序:

public class LeftMoving{ public static void main(String[] args){ System.out.println("5<<35="+(5<<35)); } }

输出结果:

5<<35=40 该结果与5<<3完全相同。

无论正数、负数,它们的右移、左移、无符号右移 32位都是其本身,比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。 一个有趣的现象是,把 1 左移 31 位再右移 31位,其结果为 -1。

计算过程:

0000 0000 0000 0000 0000 0000 0000 0001 1000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1111

程序:

输出结果:

计算过程:

程序:

输出结果:

计算过程:

程序:

输出结果:

计算过程:

程序:

输出结果:

计算过程:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表