我是靠谱客的博主 优美音响,最近开发中收集的这篇文章主要介绍java short右移24位_对于Thinking In Java中byte,short无符号右移的理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

拜读Thinking In Java看到以下内容

若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。

//对于上面的话 可以看成移动的实际位数 是 给定的移动位数%数据类型的位数

eg.

*int x = 100;

*    x << 35;//结果是800

*a:1100100//二进制补码

*35:100011//二进制补码,int类型取5个低位00011即3(相当于35%32=3)

*结果:1100100000//800

但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。可用下面这个例子检测自己的实现方案:

//

//: URShift.java

// Test of unsigned right shift

public class URShift {

public static void main(String[] args) {

int i = -1;

i >>>= 10;

System.out.println(i);//4194303

long l = -1;

l >>>= 10;

System.out.println(l);//18014398509481983

//上面两个好理解

short s = -1;

s >>>= 10;

System.out.println(s);//-1

byte b = -1;

b >>>= 10;

System.out.println(b);//-1

//这两句不理解然后写了下面一段代码

}

} ///:~

for (int i = 1; i < 32; i++) {

byte s = -1;

s >>>= i;

System.out.println(i + " " + s);

//结果是:1 -1 2 -1 3 -1 4 -1 5 -1 6 -1 7 -1 8 -1 9 -1 10 -1 11 -1 12 -1 13 -1 14 -1 15 -1 16 -1 17 -1 18 -1 19 -1 20 -1 21 -1 22 -1 23 -1 24 -1 //25 127 26 63 27 31 28 15 29 7 30 3 31 1 //为了省版面好乱 就是直到>>>25 s的结果才不再是-1

// System.out.println(Integer.toBinaryString(s));

}

想了想觉得应该是>>>= 这个写法的事 于是又写了以下

byte s = -1;

int ss = s >>> i;

System.out.print(i + " " + ss + " ");

//结果是:1 2147483647 2 1073741823 3 536870911 4 268435455 5 134217727 6 67108863 7 33554431 8 16777215 9 8388607 10 4194303 11 2097151 12 1048575 13 524287 14 262143 15 131071 16 65535 17 32767 18 16383 19 8191 20 4095 21 2047 22 1023 23 511 24 255 25 127 26 63 27 31 28 15 29 7 30 3 31 1这就很明显了 s>>>=i; 此时s是byte类型>>>1到24的值(int)都超过byte的取值范围了.btw 如果是short类型 s>>>i在i=17时开始17 32767 18 16383 19 8191 20 4095 21 2047 22 1023 23 511 24 255 25 127 26 63 27 31 28 15 29 7 30 3 31 1

s=(short)(s>>>10);//就酱

怪不得网上没找到解答,原来这么简单新手在此记录下!

最后

以上就是优美音响为你收集整理的java short右移24位_对于Thinking In Java中byte,short无符号右移的理解的全部内容,希望文章能够帮你解决java short右移24位_对于Thinking In Java中byte,short无符号右移的理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部