⑴ java中如何把十六进制转为十进制
分类: 电脑/网络 >> 程序设计 >> 其他编程伍亮语言
问题描述:
我用的java1.4 请问如何将十六进制整形数转化为十进制数橘冲的
解析:
import java.awt.*;
public class d2x extends Frame
{
int decimalValue= 0;
String baseXValue = new String("0");
TextField dDisplay,xDisplay;
d2x constructor
d2x()
{
super("Decimal Converter");set the title of the frame
MenuBar mb = new MenuBar();
Button d2Binary = new Button("Binary");
Button d2Octal = new Button("Octal");
Button d2Hex = new Button("Hex");
Button d2Base36 = new Button("Base36");
Panel p1 = new Panel();
Panel p2 = new Panel();
Panel p3 = new Panel();
add a simple menu
Menu m = new Menu("Application");
m.add(new CheckboxMenuItem("Base 36 Active"));
m.add(new MenuItem("Exit"));
add menu to menubar
mb.add(m);
setMenuBar(mb);install this menu bar in the frame
Add buttons to their own panel
p3.setLayout(new FlowLayout());
p3.add(d2Binary);
p3.add(d2Octal);
p3.add(d2Hex);
p3.add(d2Base36);
Add text fields
Label dLabel = new Label("Enter Deecimal: ");
Label xLabel = new Label("Converted Value: ");
dDisplay = new TextField(Integer.toString(decimalValue),7);
xDisplay = new TextField(baseXValue,32);
xDisplay.setEditable(false);
p1.setLayout(new FlowLayout(FlowLayout.LEFT));
p2.setLayout(new FlowLayout(FlowLayout.LEFT));
p1.add(dLabel);
p1.add(dDisplay);
p2.add(xLabel);
p2.add(xDisplay);
Add the panels
add("North",p1);
add("Center",p2);
add("South"薯歼,p3);
}end d2x constructor
public void start()
{
resize(400,150);
show();
}
public void updateXDisplay()
{
xDisplay.setText(baseXValue);
}
public boolean handleEvent(Event evt)
{
if (evt.target instanceof MenuItem)
{
if ("Exit".equals(((MenuItem)evt.target).getLabel()))
{
hide();
dispose();
System.exit(0);
return false;
}
return true;
}
else if(evt.target instanceof Button)
{
String whick = ((Button)evt.target).getLabel();
if (whick.equals("Binary"))
{
decimalValue = Integer.parseInt(dDisplay.getText());
baseXValue = Integer.toString(decimalValue,2);
}
if (whick.equals("Octal"))
{
decimalValue = Integer.parseInt(dDisplay.getText());
baseXValue = Integer.toString(decimalValue,8);
}
if (whick.equals("Hex"))
{
decimalValue = Integer.parseInt(dDisplay.getText());
baseXValue = Integer.toString(decimalValue,16);
}
if (whick.equals("36"))
{
decimalValue = Integer.parseInt(dDisplay.getText());
baseXValue = Integer.toString(decimalValue,36);
}
updateXDisplay();
return true;
}
return false;
}
public static void main(String args[])
{
d2x m = new d2x();
m.start();
}
}
⑵ JAVA 进制加减乘除的问题~ 急等!!
2、8、16进制的运算,目前sun还没有推出相关的内容。不过java提供了10进制转换成2、8、16进制的算法已经2、8、16进制转换成10进制的算法。
十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer.toBinaryString(int i)
十六进制转成十进制
Integer.valueOf("FFFF",16).toString()
八进制转成十进制
Integer.valueOf("876",8).toString()
二进制转十进制
Integer.valueOf("0101",2).toString()
你可以自己写一个2进制的算法。
有种方法可以比较简单实现。
1、例如x、y是输入的二进制的数
public static void main(String[] args){
String x = "101001";
String y = "100101";
int x1 = Integer.valueOf(x,2).toString();
int y1 = Integer.valueOf(y,2).toString();
int z = x1 + y1;
String result = Integer.toBinaryString(z);
System.out.println(result);
}
变量result就是二进制的结果了。
8、16进制的运行与上面的方法基本一致,稍微修改一下转换函数就可以了。
顺便提一句,8、16进制与2进制转换是简单了。8进制的一个数字对应2进制的3个数字,16进制的一个数字对应2进制的4个数字。
例如:8进制:数字457,将数字分开成4#5#7,对应的2进制 100#101#111
⑶ 关于java中16进制的问题
因为int 为带符号类型,带符号类型最高为是符号位,又因为0xFFFFFFFF,也就是四个字节32 bits全是1, 符号位是1,所以这个数是负数。
内存中的数值为补码表示,所以0xFFFFFFFF是一个负数的补码。负数从补码求原码,最高符号位不变,保持 1, 其余各位求反,末尾加1,也就是 0xFFFFFFFF,二进制为:11111111 11111111 11111111 11111111
-> 10000000 00000000 00000000 00000000
-> 10000000 00000000 00000000 00000001
原码首位表示符号位,其余位表示绝对值大小,所以,这个数是 -1
而0xFF转换为二进制为:00000000 0000000 00000000 11111111其高位为0,即为正数,正数的原码,反码,补码相同,所以值为255
⑷ JAVA进(JAVA程序关于八进制和16进制)
只向你讲解一下整数部分的转换规则。至于小数部分,则比较复杂。
先说非十进制转十进制,比较简单:
将数从右到左编号,最右边的编号是0,右边第二位编号为1,依此类推.
将给定数的各位值乘以进制的编号次方,再得到的结果相加即可.说起来不好理解,举个例子:
二进制:10101
编号: 43210
计算:1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0
= 1 * 16 + 0*8 + 1*4 + 1*1 = 21(十进制)
十六进制:0xA9D3
编号:3210
计算:A*16^3 + 9*16^2 + D*16^1 + 3*16^0
=10*4096 + 9*256 + 13*16 + 3 = 43475(十进制)
不信可以用WINDOWS自带的计算器验证.(查看->科学型).
====
至于十进制转非十进制,比较麻烦,要用到 连续除法求余 的计算.
用给定的数除以进制(如8,16,2),将得到商和余数,再将商除以进制,又得到商和余数.一直除到商为0为止.
然后将 所有得到的余数 按照出现的 相反 的顺序排列起来,即得到结果.
举例:
124(十进制)转二进制,连续除以"2",运算如下:
被除数/进制 = 商……余数
124 /2 = 62……0
62 /2 = 31……0
31 /2 = 15……1
15 /2 = 7……1
7 /2 = 3……1
3 /2 = 1……1
1 / 2 = 0……1
将所有出现的余数从后向前排列,就得到最后结果为:1111100
同样,将其转为八进制:
124 /8 = 15……4
15 /8 = 1……7
1 /8 = 0……1
结果即为174(八进制).
同样可在计算器上试验一下.
⑸ java中求16进制异或和
publicclassTest{
publicStringa;
publicstaticvoidmain(String[]args){
int[]a=newint[]{(int)0X8A,(int)0X12,(int)0X05,
(int)0X07,(int)0XFE,(int)0XE3,(int)0X0A,
(int)0X06,(int)0X10,(int)0X14,(int)0X29};
intChkSum=0;
for(inti=0;i<2;i++){//a.length,只有在为2时结果为98,也就是说只验证了0X8A,0X12这2个数
ChkSum=(int)(ChkSum^a[i]);
}
System.out.println(Integer.toHexString(ChkSum)+"H");
}
}
N的输入我就不写了,自己给了一个固定值2,你把 i<2中的2替换成 输入值就好