JAVA大神帮我看看这段小程序; 10进制数转换成16进制数;为什么部分结果正确,部分错误?

/*把一个十进制数用16进制的形式打印结果为什么一部分正确一部分错误呢?*/classDemo{publicstaticvoidmain(Stringarg[]){int... /*
把一个十进制数用16进制的形式打印
结果为什么一部分正确 一部分错误呢?

*/

class Demo
{
public static void main(String arg[])
{

int i = 256 ;
print(i+"=0x");

if(((i>>8)&15)>9)
print((char)(55+(i>>8)&15));

else
print((i>>8)&15);

if(((i>>4)&15)>9)
print((char)(55+(i>>4)&15));

else
print((i>>4)&15);

if((i&15)>9)
print((char)(55+(i&15)));

else
print(i&15);

}
public static void print(Object obj)
{
System.out.print(obj);
}

}
展开
 我来答
开心的马六
2014-04-16 · TA获得超过473个赞
知道小有建树答主
回答量:316
采纳率:0%
帮助的人:203万
展开全部
 print((char)(55+(i>>8)&15)); 这类似的转换有问题(+优先级高于位运算),
 改成这样:print((char) ('A' + (i >> 8 & 15) - 10))
 不过你这整体转换思路还是有点问题,只能转小于4096(1 << 12)的数...
tel1355
2014-04-16 · TA获得超过406个赞
知道小有建树答主
回答量:193
采纳率:100%
帮助的人:200万
展开全部
主要是运算符的优先级。
你那个 print((char)(55+(i>>8)&15));
中的55+(i>>8)&15
会优先计算55+(i>>8),然后再and 15。
加个括号就没事了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
赤壁赋白
2014-04-16 · TA获得超过988个赞
知道小有建树答主
回答量:338
采纳率:100%
帮助的人:233万
展开全部
import java.util.Scanner;


public class Hex {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
System.out.println("0x"+Integer.toHexString(number));
}
}

不太清楚楼主进制转换的思路,应该是位运算使得结果太大,超出了char的取值范围导致的。其实java自带有进制转换的方法可以用的。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hitzsf
2014-04-16 · TA获得超过2060个赞
知道大有可为答主
回答量:1741
采纳率:78%
帮助的人:1162万
展开全部
转16进制显示 ,还是需要查表法去做
数字字符和字母字符之间的值不是连续的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晋红豆33
2014-04-16 · TA获得超过124个赞
知道小有建树答主
回答量:331
采纳率:0%
帮助的人:80.2万
展开全部
主函数的类名前没加public
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式