黑马程序员-----------------进制间的转换
2014-03-28 17:32
239 查看
android培训、java培训、期待与您交流!
进制: 在计算机中所有数据都是用二进制存储的,一个整数也是用二进制但是是用一串1,0组合的数据表示的。
进制的表现形式主要是4种:二进制(0,1)、八进制(0,1,2,3,4,5,6,7)、十进制(0,1,2,3,4,5,6,7,8,9)、十六进制。
二进制--->十进制
原理:二进制乘以2的过程,从右往左分别乘以2(顺序的次幂)
即:00001011 ->>11
过程:1*2(0)+1*2(1)+0*2(2)+1*2(3) =1+2+0+8=11
二进制--->八进制
原理:每一位8进制数最大值为7,在进行转换的时候二进制的每三位组成一个8进制数。
例如:00001011--->13
过程:011 =1*2(0)+1*2(1) +0*2(2)=3
001= 1*2(0)+0*2(1)+0*2(2) = 1
即00001011--->13
二进制--->十六进制
原理:二进制中4个为一位16进制数.
十六进制中的元素为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
例如:1011
1011 = 1*2(0)+1*2(1) +0*2(2)+1*2(3) = 11 ,11在十六进制中对应的数据是B
因此00001011--->B
十进制--->二进制
原理:对十进制数进行除二运算,取每次除2的余数直到
即:11-->1011
过程:11/2 =5 余数为1,
5/2=2 余数为1,
2/2=1 余数为0,
1不能再除2 就是1
所以11的二进制1011
代码演示:
十进制--->八进制原理:当计算机运行的时候十进制会先转成二进制数存储,然后利用二进制转换八进制的原理进行运算,每次&7,向右3位。
001-011&000-111 =7
----------------------------------------------------------------------
000-011 = 3
将001-011右移3位,在&7
000-001
&000-111 =7
----------------------------------------------------------------------
000-001 =1
结果就是13;
代码演示
public class OctDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
toOct(11);
}
public static void toOct(int num)
{
//定义一个数组用来存放八进制元素
char[] chs = {'0','1','2','3','4','5','6','7'};
//定义一个数组存储每次 num&15的数据容器
char[] arr = new char[8];
//定义一个操作数组的指针
int pos = arr.length;
while(num!=0)
{
int n = num&7;
//每次存得到数组中最后一位数据
arr[--pos] = chs
;
//每次向右移3位
num = num >>> 3;
}
//打印存储数据数组
for (int i = pos; i < arr.length; i++) {
System.out.print(arr[i]);
}
//System.out.println(sbf.reverse());
}
}
十进制--->十六进制
原理:当计算机运行的时候十进制会先转成二进制数存储,然后利用二进制转换十六进制的原理进行运算,十六进制中的元素最大角标为15,
因此我们可以利用一个表来进行查看对应数据,每次&15以后再向由移4位
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
以十进制数11来进行分析
0000-0000 0000-0000 0000-0000 0000-1011 -------->11的二进制数
&0000-0000 0000-0000 0000-0000 0000-1111 =15
----------------------------------------------------------------------
0000-00000 0000-0000 0000-0000 0000-1011 = 11 去查找十六进制中角标为11的元素 B
右移4位&15 结果0000-0000 0000-0000 0000-0000 0000 =0
最后结果就是B
代码演示
进制: 在计算机中所有数据都是用二进制存储的,一个整数也是用二进制但是是用一串1,0组合的数据表示的。
进制的表现形式主要是4种:二进制(0,1)、八进制(0,1,2,3,4,5,6,7)、十进制(0,1,2,3,4,5,6,7,8,9)、十六进制。
二进制--->十进制
原理:二进制乘以2的过程,从右往左分别乘以2(顺序的次幂)
即:00001011 ->>11
过程:1*2(0)+1*2(1)+0*2(2)+1*2(3) =1+2+0+8=11
二进制--->八进制
原理:每一位8进制数最大值为7,在进行转换的时候二进制的每三位组成一个8进制数。
例如:00001011--->13
过程:011 =1*2(0)+1*2(1) +0*2(2)=3
001= 1*2(0)+0*2(1)+0*2(2) = 1
即00001011--->13
二进制--->十六进制
原理:二进制中4个为一位16进制数.
十六进制中的元素为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
例如:1011
1011 = 1*2(0)+1*2(1) +0*2(2)+1*2(3) = 11 ,11在十六进制中对应的数据是B
因此00001011--->B
十进制--->二进制
原理:对十进制数进行除二运算,取每次除2的余数直到
即:11-->1011
过程:11/2 =5 余数为1,
5/2=2 余数为1,
2/2=1 余数为0,
1不能再除2 就是1
所以11的二进制1011
代码演示:
public class HexDemo { public static void main(String[] args) { toBin(11); } public static void toBin(int num) { //定义一个存储每次num%2取余的数据容器 StringBuffer sbf = new StringBuffer(); while(num>0) { //把次num%2取余的数据添加进容器 sbf.append(num%2); //用num/2的商进行下一次预算 num = num/2; } //打印结果,利用容器的反转功能将结果反转成二进制数 System.out.println(sbf.reverse()); } }
十进制--->八进制原理:当计算机运行的时候十进制会先转成二进制数存储,然后利用二进制转换八进制的原理进行运算,每次&7,向右3位。
001-011&000-111 =7
----------------------------------------------------------------------
000-011 = 3
将001-011右移3位,在&7
000-001
&000-111 =7
----------------------------------------------------------------------
000-001 =1
结果就是13;
代码演示
public class OctDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
toOct(11);
}
public static void toOct(int num)
{
//定义一个数组用来存放八进制元素
char[] chs = {'0','1','2','3','4','5','6','7'};
//定义一个数组存储每次 num&15的数据容器
char[] arr = new char[8];
//定义一个操作数组的指针
int pos = arr.length;
while(num!=0)
{
int n = num&7;
//每次存得到数组中最后一位数据
arr[--pos] = chs
;
//每次向右移3位
num = num >>> 3;
}
//打印存储数据数组
for (int i = pos; i < arr.length; i++) {
System.out.print(arr[i]);
}
//System.out.println(sbf.reverse());
}
}
十进制--->十六进制
原理:当计算机运行的时候十进制会先转成二进制数存储,然后利用二进制转换十六进制的原理进行运算,十六进制中的元素最大角标为15,
因此我们可以利用一个表来进行查看对应数据,每次&15以后再向由移4位
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
以十进制数11来进行分析
0000-0000 0000-0000 0000-0000 0000-1011 -------->11的二进制数
&0000-0000 0000-0000 0000-0000 0000-1111 =15
----------------------------------------------------------------------
0000-00000 0000-0000 0000-0000 0000-1011 = 11 去查找十六进制中角标为11的元素 B
右移4位&15 结果0000-0000 0000-0000 0000-0000 0000 =0
最后结果就是B
代码演示
public class HexDemo1 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub toHex(60); } public static void toHex(int num) { //定义一个数组用来存放十六进制元素 char[] chs = {'0','1','2','3','4','5','6','7', '8','9','A','B','C','D','E','F'}; //定义一个数组存储每次 num&15的数据容器 char[] arr = new char[8]; //定义一个操作数组的指针 int pos = arr.length; while(num!=0) { int n = num&15; //每次存得到数组中最后一位数据 arr[--pos] = chs ; num = num >>> 4; } //打印存储数据数组 for (int i = pos; i < arr.length; i++) { System.out.print(arr[i]); } //System.out.println(sbf.reverse()); } }
相关文章推荐
- 【黑马程序员】java基础部分---------------进制转换、逻辑运算符
- 黑马程序员——java基础(面向对象)进制转换、数组、内存分析
- 黑马程序员——ios开发基础之C语言之进制转换、位运算与内存管理
- 黑马程序员-折半查找及进制的转换
- 黑马程序员_03_标示符_常量_进制_变量_类型转换
- 黑马程序员--进制的转换程序收藏
- 黑马程序员——Java基础——Java中几种进制的相互转换
- 【黑马程序员】Java基础01:进制之间的互相转换
- 黑马程序员-进制转换优化代码
- 黑马程序员—Java编程基础+常量与变量+类型的转换+进制的转换+运算符+scanner的使用+程序流程结构控制+循环结构
- 黑马程序员——整数的进制及转换
- 黑马程序员--Java进制的转换
- 黑马程序员java基础笔记循环、进制转换小知识集合
- 黑马程序员_Java基础:十进制转换其他进制
- 黑马程序员——2.1.基础语法(关键字、常量、进制、变量、类型转换、运算符、流程控制(判断、选择、循环))
- 黑马程序员—Java语言基础(关键字、标识符、注释、常量与变量、进制、数据类型、类型转换、代码示例)
- 不同进制间的转换
- PHP常用函数:62进制转换及任意进制之间转换函数
- 任意进制整数之间的相互转换(C++实现)
- 各进制间转换总结(写给学弟学妹)