查表法进行——进制转换
2012-07-10 12:12
148 查看
我就用绝招试试手——
1. 什么是查表法:
通过容器将对应的关系进行存储。通过运算得出相应关系中的其中一方的结果,再通过这个结果去容器中找对应的另一个内容。
可以这样理解:
在库房里有六个箱子,对每箱子都进行了编号,当我们要找某个箱子时,可以根据对应的编号到库房里去找相应的箱子!
2. 查表法的特点——
a) 有对应的关系——方便查询;
b) 必须要有容器——方便存储!
3. 查表法什么时候用?
当分析的问题当中存在映射关系时,可以使用查表法;
对于映射关系,如果对应的一方是有序的编号,比如数组的角标。 这时可以使用数组作为这个关系的容器将对应关系进行存储。数组就可以作为这些映射关系的存储表
4. 查表法如何用——
a) 下面通过具体的实例进行说明:
用查表法进行——进制的转换;
查表法的引出;
当我们要将十进制转换为 十六进制的时候 我们要做哪些事情呢?
以十进制60 为例:
60在内存中表示为
要进行除16 的操作,我们可以用移位操作,以4为单位向右移动!取出最低四位,然后再接着取下一个四位——用& 操作,完成
根据这个思路,接下来完成代码:
基本功能完成后对代码进行优化,现在只能进行十进制————十六进制,优化有可以完成十进制——十六进制 or 八进制 or 二进制的转换。
因为二进制 0 , 1
八进制 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7
这些在char [chs]里面都有所以不需要再次定义。
在进行转十六进制时右移4位,转八进制时右移3位,转二进制时右移1位,根据这个特点,进行优化:
到此,用查表法 已经基本实现 进制的转换,当中尚有诸多漏洞,将在接下来修改!
敬请期待————
1. 什么是查表法:
通过容器将对应的关系进行存储。通过运算得出相应关系中的其中一方的结果,再通过这个结果去容器中找对应的另一个内容。
可以这样理解:
在库房里有六个箱子,对每箱子都进行了编号,当我们要找某个箱子时,可以根据对应的编号到库房里去找相应的箱子!
2. 查表法的特点——
a) 有对应的关系——方便查询;
b) 必须要有容器——方便存储!
3. 查表法什么时候用?
当分析的问题当中存在映射关系时,可以使用查表法;
对于映射关系,如果对应的一方是有序的编号,比如数组的角标。 这时可以使用数组作为这个关系的容器将对应关系进行存储。数组就可以作为这些映射关系的存储表
4. 查表法如何用——
a) 下面通过具体的实例进行说明:
用查表法进行——进制的转换;
查表法的引出;
当我们要将十进制转换为 十六进制的时候 我们要做哪些事情呢?
以十进制60 为例:
60在内存中表示为
要进行除16 的操作,我们可以用移位操作,以4为单位向右移动!取出最低四位,然后再接着取下一个四位——用& 操作,完成
根据这个思路,接下来完成代码:
class jzDemo3 { public static void main(String[] args) { toHex(-60000); } public static void toHex(int num ) { char[] chs = {'0','1','2','3', '4','5','6','7', '8','9','a','b', 'c','d','e','f'}; //定义一个临时容器; char[] arr = new char[8]; //字符数组在被定义后,它的默认初始化值为'\u0000'相当于空格。 int pos = arr.length ; // 接下来 就要把 查到的字符 存到arr[] 中来,也就是要解决一个存储的问题。 while(num != 0) { // num 是 移动后 前面的二进制位,temp 是 运算后得到的数 int temp = num & 15; arr[--pos] = chs[temp]; num = num >>> 4; } //存储数据的arr数组遍历 for(int x = pos; x < arr.length ; x++) { System.out.print(arr[x]); } System.out.println(); } }
基本功能完成后对代码进行优化,现在只能进行十进制————十六进制,优化有可以完成十进制——十六进制 or 八进制 or 二进制的转换。
因为二进制 0 , 1
八进制 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7
这些在char [chs]里面都有所以不需要再次定义。
在进行转十六进制时右移4位,转八进制时右移3位,转二进制时右移1位,根据这个特点,进行优化:
class jzDemo4 { public static void main(String[] args) { toBin(6); toHex(60); toBa(30); System.out.println("Hello World!"); } //转2 public static void toBin(int num) { trans(num , 1, 1); } //转16 public static void toHex(int num) { trans(num , 15, 4); } //转8 public static void toBa(int num) { trans(num , 7, 3); } public static void trans(int num , int base , int offset) { if(num == 0) { System.out.println(0); return ; } char[] chs = {'0','1','2','3', '4','5','6','7', '8','9','a','b', 'c','d','e','f'}; char[] arr = new char[32]; int pos = arr.length; while(num != 0) { int temp = num & base; arr[--pos] = chs[temp]; num = num>>> offset ; } for(int x = pos ; x < arr.length ; x++) { System.out.print(arr[x]); } System.out.println(); } }
到此,用查表法 已经基本实现 进制的转换,当中尚有诸多漏洞,将在接下来修改!
敬请期待————
相关文章推荐
- 使用toString & parselong/double/int 进行进制转换
- Oracle中如何进行进制转换(2进制,10进制,16进制)
- 利用栈进行进制转换
- 用查表发进行进制转换
- Oracle HowTo:Oracle中如何进行进制转换
- Linux下用bc快速进行数字进制转换
- Oracle中如何进行进制转换
- 使用 Shell 进行进制转换
- 使用 bc 进行进制转换
- (基础十二)使用数组索引进行进制转换
- C语言-利用栈进行进制转换
- Oracle中如何进行进制转换
- 使用栈进行进制转换
- 轻松运用itoa进行进制转换
- C#中使用进制转换思想对字符串进行任意进制任意字典的加密和解密
- 用栈来进行数字的进制转换
- Oracle HowTo:Oracle中如何进行进制转换
- Oracle中如何进行进制转换
- 使用JavaScript进行进制转换
- 数据结构之利用栈进行进制转换