关于java位运算

 1、     首先要知道符号数的二进制表现形式,在计算机中有三种表示方法,正整数是使用2的原码来表示,负整数是使用2的补码来表示。

而且在二进制里面最高位是用于表示符号位的,1为负,0为正,比如byte类型用8位来表示,其中最高位用于符号位,剩下的用于表示数值!

具体的转换过程就是补码=反码+1,反码等于原码取反(符号位不变)

举个例子:

       8表示成二进制的形式是:0000 1000:;

       -8表现成二进制的形式是:1111 1110 ;

具体是怎样转换的呢?首先把0000 1000取反得到反码就是1111 0111,然后加1得到补码就是1111 1000;

至于为什么要使用2的补码的方式来表示负数可以参考下面的网址:

http://www.ruanyifeng.com/blog/2009/08/twos_complement.html

2、    下面介绍Java的一些数值类型转换规则

       2.1、如果最初的数值类型是有符号的(分正负),那就执行符号扩展

       2.2、如果是不带符号类型的(如char型),那就执行0扩展

       2.3、如果目标类型的长度小于源类型的长度,则直接截取目标类型的长度,比如将int型转成byte型就直接截取int型的右边8位!

3、什么是符号扩展(Sign extension)

      用于在数值类型转换时扩展二进制位的长度,以保证转换后的数值和原数值的符号(正或负)和大小相同,一般用于较窄的类型

(如byte)向较宽的类型(如int)转换。扩展二进制位长度指的是,在原数值的二进制位左边补齐若干个符号位(0表示正,1表示负)。

    举例来说,如果用6个bit表示十进制数10,二进制码为"00 1010",如果将它进行符号扩展为16bits长度,结果是"0000 0000 0000 1010",

即在左边补上10个0(因为10是正数,符号为0),符号扩展前后数值的大小和符号都保持不变;如果用10bits表示十进制数-15,使用“2的补码

”编码后,二进制码为"11 1111 0001",如果将它进行符号扩展为16bits,结果是"1111 1111 1111 0001",即在左边补上6个1(因为-15是负数,符号为1),

符号扩展前后数值的大小和符号都保持不变。

4、什么是0扩展:

   如果用6个bit表示十进制数10,二进制码为"00 1010",如果将它进行0扩展为16bits长度,结果是"0000 0000 0000 1010",

 即在左边补上10个0(因为10是正数,符号为0)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值