概述
搞了这么久的程序,还是对进制和转化一知半解,曾也在这上面栽了几回,今天就狠下心好好研究下吧:
1. 二进制表示:
形如:0000 0001
每一位称为一个bit位,有多少个bit位,这个二进制数就有几位。如该数有8个bit位。
2. 数据类型与二进制位数:
1 个字节 有 8 个bit位 即: 1Byte = 8bit
1 个字 有 2 个字节 即: 1Word = 2Byte = 16bit
Java中的整数类型:
short 有 2个字节 即: 1short = 2Byte = 16bit
int 有 4个字节 即: 1int = 4Byte = 32bit
long 有 8个字节 即: 1long = 8Byte = 64bit
2'. 容量与二进制位数:
1KB = 1024 Byte = 1024 * 8 bit = 1024 个字 = 1024 short = 512 int = 256 long
3. 二进制与十进制的关系:
以一个short型(16bit)为例:
二进制:0001 0101 = 2^0 + 2^2 + 2^4 = 21 : 十进制
4. 二进制的负数表示:
对于每类型的数据,使用其bit位的最高位来表示符号,最高位为1表示负数,0为正数。如short的第8位,int的第32位,long的第64位。
以一个short型(16bit)为例:
十进制数:21 = 二进制数:0001 0101 --- 那么 -21如何表示?
先对21的二进制数取反 : 1110 1010
再+1 : 1110 1011 ----这就是-21.
对于一个一进制数 :1110 0111 ----这是一个负数,那它是负几呢?
可以使用上面方法的逆向方法,但也可以使用同样的方式(二进制就是这么巧妙)
取反 :0001 1000
再+1 :0001 1001 ----- 2^0 + 2^3 + 2^4 = 25, 所以原来的数为-25.
5. 数据类型的表示范围:
以short为例:
short共8bit,其中最高位(第8位)用来表示符号,所以
其正数范围为 0 ~ (2^0 + 2^1 + 2^2 + ... + 2^6) = 2^7 - 1。
也可以这样理解,用7个bit位来表示数值(第8位用来表示符号),排列可能数为 2^7,0为其中的一个可能,所以范转为 0 ~ 2^7-1 即 0 ~ 127
其负数范围为 -1 ~ - (2 ^ 7) 即 -1~-128
为什么不是-127呢,还是向上面一样理解,用7个bit位来表示数值(第8位用来表示符号),排列可能数为 2^7,但是与正数不同的是,这里不需要抽一种可能来表示0,而是直接从-1开始,共128种可能,即到-128.
所以总结为:short类型的数值范围为 -128 ~ 127,其中负数范围为 -128 ~ -1 (共128个数),正数范围为 0 ~ 127 (共128个数)
同理:
int : -(2^15) ~ 2^15 -1
long : -(2^63) ~ 2^63 -1
待续: java中的类型转换补位,纯二进制转换,二进制移位操作, java的二进制使用BitSet
最后
以上就是积极小熊猫为你收集整理的二进制与十进制的关系和转化的全部内容,希望文章能够帮你解决二进制与十进制的关系和转化所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复