您的位置:首页 > 编程语言 > Java开发

Java-二进制

2016-04-01 19:56 323 查看

二进制

什么是二进制?

1)逢2进1的计数规则,数字:0,1.权:1,2,4,8….

2)只要能够支持计数,就能够支持任何的数学运算

为什么使用二进制?

优点:使用2进制是计算机硬件成本最优的选择

缺点:与人的计数习惯不同

Java利用”魔术”手段支持了10进制,使使用者感觉Java支持了10进制

二进制的应用

1)进制转换

*因为进制都是用于计数,可以表示相同数字.例:255(10)=11111111(2);

*10进制转2进制的转换规律:2进制的每个数字乘以权的和数值就是对应的10进制数

*2进制转10进制的转换规律:减法(减去比它小的最大的2进制数字,依次递减,比差大就是1否则就是0).除法(除2倒取余数)

2)补码

*是一种算法,利用固定数位2进制的周期变化现象,将大数当负数使用

规定高位为1的数作为负数使用,称为补码 例:1111,1110,1101…

*Java内部的数字全部是补码

*补码算法利用正数表示负数,节省了硬件成本

*Java在parseInt()(输入时将10进制编译成2进制);toString()(输出时将2进制翻译成10进制)方法中封装了补码算法,在数据输入输出的时候自动调用,自动化支持补码

*补码规律:取反对称规律—公式:~n+1=-n(一个数取反再加1正好等于它的相反数,去掉最大值和最小值.例:-5取反是4 加1是5 -5的相反数)

*溢出规律:补码不支持超范围计算,超范围计算自动溢出:n+(max+1)*2=n,n-(max+1)*2=n

*注意:Java中byte short 是利用int模仿的,byte和short计算结果是int

3)2进制运算

*Java中移位运算永远高于乘法运算

*2进制的基数是2,10进制的基数是10

*移位运算的用途:移位运算与位运算配合,用于对整数进行拆分和合并

运算符:(>>>):无符号右移位运算,也叫逻辑右移,无论是正数还是负数,高位都补0

(<<):左移位运算,也叫数学左移

*计算规则:每个2进制数字向左移动,低位(最后一位)填充0

数学意义:引子—10进制中小数点向右移动一次,数字变为原数基数(10)—即:小数点不动,数字向左移动一次,2进制中左移n位,数字变为原数*(基数的n次幂),例:int a=100; int b=a<<1; b=100*2=200

(>>):右移位运算,也叫数学右移

*为了保持符号不变(正数移动以后还是正数,负数移动以后还是负数),负数高位补1,正数高位补0

*注意:运算结果符合数学除以2规律,负数右移位,在发生小数时,向小方向取整

*2进制右移n位,数字变为原数/(基数的n次幂)

~:取反运算

&:and 与运算(逻辑乘法)

*运算规则:将俩个操作数按位对齐,每个位之间进行乘法,称为与运算

例:int a=100,b=15; int c=a&b; //c=4—0100—100的2进制表示后4位数

*用途:用于截取一个数的特定位数

|:or 或运算(逻辑加法)

*计算规则两个数对齐上下数字进行逻辑加法,可以用于将byte合并为int

4)16进制

*16进制是2进制的缩写形式:书写2进制

*16进制数组:0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f(每4位2进制,是一位16进制)

5)文字的编码

*将char类型拆分为byte数据,称为文字的编码,将byte数据合并为char数据称为文字解码

*UTF-16BE:支持65535个字符,英文浪费一半空间,每个字符固定字节码

UTF-8:支持10万+字符,采用变长编码1-4字节,根据字符大小来确定其字节码,英文1字节,中文3字节,是国际化最优编码

GBK:中国标准,支持2万+字,变长编码1-2字节,英文1个字节,中文2个字节,无其他国家,是中国本地化最优编码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: