您的位置:首页
进制的转换
2016-05-18 17:34
2361 查看
package conversationofnumbersystems; public class Test1 { public static void main(String[] args){ /** * 计算机刚开始都是二进制,0101的形式,但是由于二进制表示大数据太长了,所以就产生了8进制和16进制用来存储大数据。 * 8进制是将二进制的3个位作为一段,使用其十进制的值表示 * 16进制是将二进制的4个位作为一段,使用十进制的值表示,不过10~15使用ABCDEF表示,a~f支持大小写 * 数制是用一组固定的符号和统一的规则来表示数值的方法 * 计算机底层使用的数制是二进制 * java编写程序使用的是十进制,但是java底层使用的仍然是二进制 * 常用的进制还包括8进制和16进制 * * 十进制的基本数字是0~9,逢10进位 * 10被称为基数,10的n次幂被称为权 * 10000=1*10^4(注意:这里我的^是表示指数的,在数学里是这样表示的,但是在计算机语言中^表示的不是指数,是一种位运算符,将两个数转换成2进制,不同则为1) * 1000=1*10^3 * 23678=2*10^4+3*10^3+6*10^2+7*10^1+8*10^0 * * 二进制的基本数字是0 1,逢2进位 * 二进制的基数为2,权为2的n次方 * 在Java中使用0b作为前缀 * 1=1*2^0 * 10=1*2^1+0*2^0 * 100=1*2^2+0*2^1+0*2^0 * 1111(二进制)=1*2^3+1*2^2+1*2^1+1*2^0=15 或者1111+1=10000-1=2^5-1=15 * * 十六进制 * 基本数字: 0 1 2 3 4 5 6 7 8 9 A B C D E F (字母可以是大写表示也可以小写表示) * 基数为16,权为16的n次方 * 十六进制实际上是二进制的简写,方便专业人员书写二进制数据,因为二进制表示大数据过长 * 在java中十六进制用0X或者0x作为前缀 * 1=1*16^0 * 10=1*16^1+0*16^0 * 5e=5*16^1+14*16^0=5*16+14*10=94 * * 十六进制转化为十进制 * 0x12 =1*16^1+2*16^0=18 * 十六进制转换为二进制 * 0x12=00010010 * 方式:因为16是2的4次方,所以可以将16进制的每一位转换成为4位的二进制然后联合起来,十六进制和二进制每一位的连接使用的是加法而不是乘法 * * 照这个逻辑,8进制是2的3次方,所以八进制转换成为2进制就是将每一位8进制的数转换成3位的2进制数,联合起来。 * 012=001010 * 十六进制和8进制的转换可以通过2进制作为媒介达到效果。 * 二进制转换成为16进制和2进制转换成为8进制也是类似的原理 * * 将10进制转换成为2进制、8进制、16进制 * 转为2进制,10一直除2,知道商为0,将余数倒叙联合就是了 * 除数 被除数 商 余数 * 2 10 5 0 * 2 5 2 1 * 2 2 1 0 * 2 1 0 1 * 得到:1010=2^3+2^1=10 * 8 56 7 0 * 8 7 0 7 * 得到070=7*8^1+0*8^0=56 * 16 466 29 2 * 16 29 1 13 * 16 1 0 1 * 得到0x1D2 * */ int x=0x1D2; System.out.println(x); /*System.out.println(Integer.toBinaryString(18)); System.out.println(Integer.toOctalString(18));*/ } } 8421码将2进制转换成为10进制: 8421码的原理是将一些常用的二进制的位值代表的十进制列出来,查找替换进行十进制和二进制的转换。 1 1 1 1 1 1 1 1 128 64 32 16 8 4 2 0 二进制转10进制: 0b10010=2+16=18 十进制转2进制: 18=16+2=0b10010 178=128+32+16+2=0b10110010 浮点型的进制转换: 浮点型的存储结构和整形的不一样 浮点型的存储范围大于long型。 不是太明白,不想深究了。 float类型数字在计算机中用4个字节存储。遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值 指数部分 占用8bit的二进制数,可表示数值范围为0-255 但是指数可正可负,所以,IEEE规定,此处算出的次方必须减去127才是真正的指数。 所以,float类型的指数可从-126到128 底数部分实际是占用24bit的一个值,但是最高位始终为1,所以,最高位省去不存储,在存储中占23bit 科学计数法。 格式: SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM S表示浮点数正负 E指数加上127后的值得二进制数据 M底数 举例: 17.625在内存中的存储 首先要把17.625换算成二进制:10001.101 整数部分,除以2,直到商为0,余数反转。 整数部分:17=10001 小数部分,乘以2,直到乘位0,进位顺序取。 小数部分: 0.625*2=1 .25 0.25*2=0 .5 0.5*2=1 .0 0*2=0 .0 ...... 得到:1010... 在将10001.101右移,直到小数点前只剩1位: 1.0001101 * 2^4 因为右移动了四位 这个时候,我们的底数和指数就出来了 底数:因为小数点前必为1,所以IEEE规定只记录小数点后的就好。所以,此处的底数为:0001101 指数:实际为4,必须加上127(转出的时候,减去127),所以为131。也就是10000011 符号部分是整数,所以是0 综上所述,17.625在内存中的存储格式是: 01000001 10001101 00000000 00000000 换算回去:自己做。
相关文章推荐
- php变量和字符串连接符——点
- Android Studio 修改包名
- Windows-----Android--Studio-----使用Git
- 通过CMake实现debug开关
- BOS Table 如何指定表、行、列或单元不可编辑
- lintcode ----字符串查找
- iOS 创建一个可以点击并拖拽的Button
- 机器学习的学习笔记1
- winserver2008 Oracle 11g 安装
- YII 自动生成实体模版
- mssql表变量和临时表
- Android Studio 百度地图 230错误 Scode码校验失败
- 【MongoDB】MongoDB入门(一)基本操作&常用命令
- Problem A - Sum Kind Of Problem 2015 ACM/ICPC Greater New York Region
- servlet3.0新特性Servlet3.0引入的若干重要新特性,包括异步处理、新增的注解支持、可插性支持等等
- 学生信息系统错误分析2
- GL_BOOK_1
- ubuntu14.04 configure: error: xml2-config not found. Please check your libxml2 installation错误解决
- cocos2d-x手游性能优化总结
- RPC学习了解