二进制换算,操作符

一、基础知识

二、实例解析(重点)

三、参考文章

 

一、原码、补码、反码

http://baike.baidu.com/view/742694.htm

 

Thinking In Java

3.1.8 移位运算符
移位运算符面向的运算对象也是二进制的“位”。可单独用它们处理整数类型(主类型的一种)。左移位运算符(<<)能将运算符左边的运算对象
向左移动运算符右侧指定的位数(在低位补0)。“有符号”右移位运算符(>>)则将运算符左边的运算对象向右移动运算符右侧指定的位数。
“有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。Java也添加了一种“无符号”右移位运算符(>>>),
它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。


二、PS::(实例解析)

 

System.err.println("-20 >> 3===" + (-20 >> 3));//两次取补32位   System.err.println("20 >> 3===" + (20 >> 3)); //2 (20/8=2)   System.err.println(("-20 << 3==")+ (-20 << 3)); //两次取补32位   System.err.println("20 << 3==" + (20 << 3));  //160 (20*8=160)   System.err.println("-20 >>> 3===" + (-20 >>> 3)); //一次取补,移位,结果   System.err.println("20 >>> 3===" + (20 >>> 3)); //2 (20/8=2)      //sepcial   System.err.println("-1 << 10===" + (-1 << 10));//两次取补32位   System.err.println("-1 << 24===" + (-1 << 24));//两次取补32位   System.err.println("-1 >> 10" + (-1 >> 10));   System.err.println("-1 >> 24" + (-1 >> 24));   System.err.println("-20 >> 10==" + (-20 >> 10)); 两次取补32位      P.p("-----" + (4 >> 3));   System.out.println("=====" + (-1 >>> 1));  } }

/*  * 11111000 –8 >>1 11111100 –4  1、求-8的补码(反码+1)==>11111000 2、移位(>>1)去掉右边最后一位,在左边+1(因为是负数)==>1111 1100(最高位为1,值为负) 3、再求补码(反码+1)  */

/** int a = -1; a = a >>> 24; 下面用二进制形式进一步说明该操作: 11111111 11111111 11111111 11111111 int型-1的二进制代码>>> 24 无符号右移24位00000000 00000000 00000000 11111111 int型255的二进制代码  */

/* 在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。 右移一位相当于除2,右移n位相当于除以2的n次方。 对于正数来说和带符号右移相同,对于负数来说不同。  */

/* System.err.println("-1 << 10===" + (-1 << 10));//两次取补32位 1、1的原码:00000000 00000000 00000000 00000001 2、1的补码: 11111111 11111111 11111111 11111111 (原码=反码+1) 3、                       11111111 11111111 11111100 00000000 (左移10位,低位补0,最高位为1,值为负) 4、                      00000000 00000000 00000011 11111111 ==>(+1)            00000000 00000000 00000100 00000000 ==>1*2^10=1024 结果为-1024 (第三步结果的补码)    */



-8 >> 1

/*
 * 11111000 –8 >>1 11111100 –4  
1、求-8的补码(反码+1)==>11111000
2、移位(>>1)去掉右边最后一位,在左边+1(因为是负数)==>1111 1100(最高位为1,值为负)
3、再求补码(反码+1)
 */



 

三、Reference:

http://wenku.baidu.com/view/a7b747a2284ac850ad024276.html

http://zhidao.baidu.com/question/318286286.html

http://blog.163.com/zh_y_yang/blog/static/181552412201132685034960/

http://jinguo.iteye.com/blog/540150
think in java


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值