黑马程序员技术交流社区
标题:
右移运算符(>>)和无符号右移运算符(>>>)
[打印本页]
作者:
Shimano
时间:
2013-12-7 11:46
标题:
右移运算符(>>)和无符号右移运算符(>>>)
本帖最后由 Shimano 于 2013-12-7 11:52 编辑
public class JinZhiZhuanHuan
{
public static void main(String[] args)
{
int num = 60;
//int num = -123456;
toHex(num);
}
public static void toHex(int num)
{
StringBuffer sb = new StringBuffer();
for(int x=0; x<8; x++)
{
int temp = num & 15;
if(temp>9)
//System.out.println((char)(temp-10+’A’));
sb.append((char)(temp-10+'A'));
else
//Syetem.out.println(temp);
sb.append(temp);
num = num >>> 4;
//num = num >>4;//运行结果与无符号右移运算符一样为:FFFE1DC0
}
System.out.println(sb.reverse());
}
}
复制代码
/* 用(>>>)或(>>)
当int num = 60;时,运行结果是:0000003C
当int num = -123456;时,运行结果是:FFFE1DC0
*/
/*
这是十进制转换十六进制的相关代码,有点不懂无符号右移在此处的用法,
既然,for循环中用x=0; x<8;规定了循环的次数,也就限定了右移的次数,
那么不管这个数是正数还是负数,右移后最高位补0或者1都不会影响计算的。
也就是说,即便是一个负数,右移后最高位补1,当进行了8次右移后,循环结束,
也不影响temp & 15 这个运算。
并且,我把无符号右移运算符(>>>)改为右移运算符(>>),运行结果一样正确,
在这我想请教一下,关于(>>>)和(>>)的用法,关键是此处temp & 15 的具体体现,
*/
作者:
王尧
时间:
2013-12-7 13:30
1. >>:表示最高位补什么由原有数据的最高位值而定,如果最高位为0,右移后用0补空位;如果最高位为1,右移后用1补空位。
2.>>>:表示无论最高位什么,右移后用0补空位。
3.用>>>是因为 如果是正数 那么和>>效果一样,如果遇到负数,那么就把原有数据移完,最终移到0,结束。如果用>>,碰到负数,那么最高位永远是1,永远移不完,运行程序的时候会提示Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1。
4.楼主碰到这种情况,可能是写完程序忘了保存?然后直接java了?
5.详情请看毕老师的视频第二天中的 位移运算符。{:soso_e113:}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2