当前位置: 代码迷 >> Java相关 >> [求助]位移基础知识
  详细解决方案

[求助]位移基础知识

热度:259   发布时间:2007-02-01 21:54:16.0
[求助]位移基础知识

请用移位的方式打印出一个进制整数的十六进制形式。
提示:按每4个二进制位对整数进行移位和去高位处理,得到的结果就是十六进制数的一位

本题目的:
如: int tmp = 100;
通过移位最后输出tmp的十六进制形式,即 64


谁能帮忙写个正确的这种操作? 谢谢!
---------------------------------------------------------
如:
public class Test
{
public static void main(String[] args)
{
int tmp=100;

while(这里应该怎么写循环条件)
{
tmp = (tmp>>4) & 0x0f; //这步是右移4位,然后与操作0x0f ,得到的是高4位是吗?
.............
................
}
}
}
-------------------------------------------------------------------------

搜索更多相关的解决方案: 位移  基础  知识  

----------------解决方案--------------------------------------------------------

[CODE]/*
* Test1.java
*
* Created on 2007年2月1日, 下午10:10
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package test;
/**
*
* @author lbf
*/
public class Test1 {

/** Creates a new instance of Test1 */
public Test1() {
}
public void printMe(){
System.out.println("Hello world");
}
public static void main(String[] args) {
System.out.println(getHexString(1022500));
}
public static String getHexString(int number){
char[] hex={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
StringBuffer sb=new StringBuffer("0x");
int mask=0xF;
for(int i=7;i>=0;i--){
int temp=number>>(i*4);
temp=temp&mask;
sb.append(hex[temp]);
}
return sb.toString();
}
}[/CODE]

看看是不是你要的效果


----------------解决方案--------------------------------------------------------
以下是引用千里冰封在2007-2-1 22:19:26的发言:
[CODE]public static String getHexString(int number){
char[] hex={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
StringBuffer sb=new StringBuffer("0x");
int mask=0x0F;
for(int i=7;i>=0;i--){
int temp=number>>(i*4); //为什么要先移28次? 我知道一个int 占32位,一共移8次就可以转成16进制,为什么要先移28次?
temp=temp&mask; //还有这个与操作我比较糊涂,大概知道这样操作可以取上面的四位,可不明白原理
sb.append(hex[temp]);
}
return sb.toString();
}[/CODE]

利用移位可以用这种方法,挺方便的,看看行不行

代码结果是完全对的!但我还是不太明白位移的原理.
---------------------------------------------------------------------

int number = 100 ; 二进制:1100100 右移28次后不全是0了吗? 都是0怎么和0x0f与操作呀?
_______________________________________________


----------------解决方案--------------------------------------------------------
一个int值是有32位的,右移28位后当然 是0啊,0&0x0F当然是0了

但是这只是100啊,如果是1000000呢,他移28过来 后就不一定是0了,所以既然你传入的是int值,所以必须得分七次移完28位,

因为四位对应一个十六进制数嘛


----------------解决方案--------------------------------------------------------

有点儿明白了...


----------------解决方案--------------------------------------------------------
谢谢千里
----------------解决方案--------------------------------------------------------
不用谢

----------------解决方案--------------------------------------------------------
万里雪飘大哥果然名不虚传啊!呵呵!谢谢!小弟我何时才能赶上你啊!
----------------解决方案--------------------------------------------------------

请不要叫我万里雪飘,我是千里冰封


----------------解决方案--------------------------------------------------------
  相关解决方案