#include<iostream>
using namespace std;
int main()
{
int a,b,c,d;
cout<<"请输入待转换的数:";
cin>>a;
//二进制分别计算每一位
if(a==0)cout<<a;
b=a;c=0;d=1;
while(b!=0)
{
c+=(b%2)d;//依次把b除以2的余数写在c的对应位置上
b=b/2;
d=10;
}
cout<<c<<endl;
//八进制和十六进制使用格式化输出即可,oct表示八进制,hex表示十六进制
cout<<oct<<a<<endl;
cout<<hex<<a<<endl;
}只向你讲解一下整数部分的转换规则。至于小数部分,则比较复杂。
先说非十进制转十进制,比较简单:
将数从右到左编号,最右边的编号是0,右边第二位编号为1,依此类推
将给定数的各位值乘以进制的编号次方,再得到的结果相加即可说起来不好理解,举个例子:
二进制:10101
编号: 43210
计算:12^4 + 02^3 + 12^2 + 02^1 + 12^0
= 1 16 + 08 + 14 + 11 = 21(十进制)
十六进制:0xA9D3
编号:3210
计算:A16^3 + 916^2 + D16^1 + 316^0
=104096 + 9256 + 1316 + 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(八进制)
同样可在计算器上试验一下String oct = IntegertoOctalString( args);//括号里是要转换的十进制数
八进制和十六进制是字符串形式,转换出来后要有String类引用。
八进制字符串转为10进制
int s = IntegerparseInt(oct, 8);//第一个参数是要转换为10进制的字符串,第二个参数是表明字符串是几进制的数,这里是8进制。也可以是2,10,16
1 你的方法,应先做个字符串拼接,不然3个整数,用+号连接,Java默认先计算再输出
2 Java中Integer类中,有方法可以将10进制数转成8进制数
3 采用格式化输出
代码如下,有注释,参考:
class work8 {public static void main(String[] args) {
int num = 100;
Systemoutprintln("Java自带的方法转8进制:" + IntegertoOctalString(num));
int n1 = num & 7;
int temp1 = num >>> 3;
int n2 = temp1 & 7;
int temp2 = temp1 >>> 3;
int n3 = temp2 & 7;
// 做字符串拼接
Systemoutprintln("" + n3 + n2 + n1);
// 格式化输出
Systemoutprintf("%d%d%d", n3, n2, n1);
}
}
亲,如果回答满意,请即时采纳,谢谢!
首先你要看懂这四个数字及对应的的意思:8 4 2 1
0/1 0/1 0/1 0/1
一个int类型的整数是32位的
先理解十六进制吧,十六进制是二进制的简写,四位为一组
是0x开头表示的,
二进制呢就是32位的0和1的组合,正数是0开头,负数是1开头。
八进制是以0开头,三位为一组
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)