初学者刚开始学JAVA.帮看看这首题 帮我写一个代码,完成下面这个练习(用位运算和移位运算将一个整数110从右端开始的4到7位变成0)我自己思路都没有..如有能人看到..帮我写一个出来我学习学习..谢谢.. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int a = 110;int b = a | 0xFF87; //(1111,1111,1000,0111)System.out.println(b); 纠正一下,弄错了int a = 110; int b = a & 0xFF87; //(1111,1111,1000,0111) System.out.println(b); 改成 a & 0xFFFFFF87 会更好一些的。 int 110转化为二进制表示就是 0110 1110,要求是将从右端起第4位到第7位变为0,就是说原0110 1110 应转化为 0000 0110,现在二进制值0000 0110实际就是十进制的6了.通过使用>>>运算符(该运算符运算后在高位补0,>>运算符是在高位补符号位),将0110 1110右移4位,即可得到0000 0110.int i = 110;int afterShift = i>>>4;afterShift = 6 即0000 0110 6楼的解释不错,可是还能不能再具体点,什么叫做高位补0“通过使用> > > 运算符(该运算符运算后在高位补0,> > 运算符是在高位补符号位),将0110 1110右移4位,即可得到0000 0110”这句话不明白,还有能不能再解释下这句:int b = a & 0xFF87; 与运算,&0为0,&1不变,将4-7位添上4个0,其余位为1,然后& 用右移运算,是碰巧了,如果不是0110 1110,而是1110 1110呢?右移4位是0000 1110,但正确的应该是1000 0110int b = a & 0xFF87;//这里高16位我省略了,因为110的二进制高16位都是0,但是要知道实际上int占4个字节,有32位110的二进制0000 0000 0110 1110(只看低16位,因为高16位都是0,这个问题可以不考虑),现在要把右边开始第4到第7位变为0,即变为0000 0000 0000 0110首先,你要知道对于二进制 1 & 0 = 0, 1 & 1 = 1,所以,要保持某位的值不变,就 & 1, 要使某位的值为0,就 & 0,即 0000 0000 0110 1110& 1111 1111 1000 0111 (从右开始4-7位为0,其余都是1)---------------------- 0000 0000 0000 0110其中二进制1111就是16进制F,1000是8,0111是7,所以1111 1111 1000 0111就是FF87,java中的十六进制是以0x开头,即0xFF87所以int b = a & 0xFF87;就是这么来的。这样说明,LZ明白了吗? 2楼的方法是最好的是要用 OXFFFFFF87.因为INT为4个字节的 java 多线程是否能实质性的改善程序执行效率 QQ城市达人的很玄妙实现方式,不知道怎么实现的有知道的吗? java 多线程 同步锁问题 有关TextArea类的问题??? 获取java源文件中的注释 关于对main函数理解上的问题 菜鸟提问,怎么运行java程序,我用jcreator 大数据处理 用JAVA写了程序(application)之后,要在网上用,总不能让人家都装JDK吧,有什么好的办法 java中匿名内部类可以有构造方法吗,若可以如何编写??? 再谈谈 初始化 这个有时让人糊涂的问题 关于JAR打包的简单问题
int b = a | 0xFF87; //(1111,1111,1000,0111)
System.out.println(b);
int a = 110;
int b = a & 0xFF87; //(1111,1111,1000,0111)
System.out.println(b);
int afterShift = i>>>4;afterShift = 6 即0000 0110
“通过使用> > > 运算符(该运算符运算后在高位补0,> > 运算符是在高位补符号位),将0110 1110右移4位,即可得到0000 0110”
这句话不明白,还有能不能再解释下这句:int b = a & 0xFF87;
右移4位是0000 1110,但正确的应该是1000 0110
int b = a & 0xFF87;//这里高16位我省略了,因为110的二进制高16位都是0,但是要知道实际上int占4个字节,有32位
110的二进制0000 0000 0110 1110(只看低16位,因为高16位都是0,这个问题可以不考虑),现在要把右边开始第4到第7位变为0,即变为0000 0000 0000 0110
首先,你要知道对于二进制 1 & 0 = 0, 1 & 1 = 1,所以,要保持某位的值不变,就 & 1, 要使某位的值为0,就 & 0,即
0000 0000 0110 1110
& 1111 1111 1000 0111 (从右开始4-7位为0,其余都是1)
----------------------
0000 0000 0000 0110其中二进制1111就是16进制F,1000是8,0111是7,所以
1111 1111 1000 0111就是FF87,java中的十六进制是以0x开头,即0xFF87
所以int b = a & 0xFF87;就是这么来的。
这样说明,LZ明白了吗?