首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

问个java的移位有关问题

2012-03-30 
问个java的移位问题Java codeimport java.util.*public class a{public static void main(String[] args)

问个java的移位问题

Java code
import java.util.*;public class a{    public static void main(String[] args)    {        byte a = -1;        for (int i = 1;i < 32 ;++i )        {            byte b = (byte)(a >>> i);            a >>>= i;            System.out.println("i=" + i);            System.out.println(Integer.toBinaryString(a)); //输出A            System.out.println(Integer.toBinaryString(a >>> i)); //输出B        }    }}

上面这段代码中,前24次循环输出A总是输出32个1,而输出B依次输出从32个1到8个1,第25次循环输出A输出7个1,输出B输出0,之后所有的循环两个输出都是0.如果>>>操作符是先扩充成32位的int,再移位的话,那么输出A第26次循环应该输出6个1,而输出B为什么从第25次循环开始就输出0?
求高人解答java移位操作符的具体过程。

[解决办法]
java移位问题,其实是这样的32位的,
i>>j实质为i>>(j%32),这样 33>>32=33*(32%32)=0
三个>>>是无符号整型的移位
[解决办法]
探讨
上面这段代码中,前24次循环输出A总是输出32个1,而输出B依次输出从32个1到8个1,第25次循环输出A输出7个1,输出B输出0,之后所有的循环两个输出都是0.如果>>>操作符是先扩充成32位的int,再移位的话,那么输出A第26次循环应该输出6个1,而输出B为什么从第25次循环开始就输出0?
求高人解答java移位操作符的具体过程。

[解决办法]
探讨

引用:
上面这段代码中,前24次循环输出A总是输出32个1,而输出B依次输出从32个1到8个1,第25次循环输出A输出7个1,输出B输出0,之后所有的循环两个输出都是0.如果>>>操作符是先扩充成32位的int,再移位的话,那么输出A第26次循环应该输出6个1,而输出B为什么从第25次循环开始就输出0?
求高人解答java移位操作符的具体过程。

重点在于语……

热点排行