java中的位运算..docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java中的位运算.

JAVA的位运算 关键字: java 位运算 Java 位运算一,Java 位运算 1.表示方法:  在Java语言中,二进制数使用补码表示,最高位为符号位,正数的符号位为0,负数为1。补码的表示需要满足如下要求。 (l)正数的最高位为0,其余各位代表数值本身(二进制数)。 (2)对于负数,通过对该数绝对值的补码按位取反,再对整个数加1。 2.位运算符 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算。位运算符可以分为逻辑运算符(包括~、&、|和^)及移位运算符(包括、和)。~是取反运算 首先,你要知道java中的int是32位的 其次,正数以原码的形式存储,负数以补码的形式存储 4的二进制是0000 0000 0000 0000 0000 0000 0000 0100 取反后得1111 1111 1111 1111 1111 1111 1111 1011 java中都是有符号数,首位是1,所以是负数,负数也就是补码,也就是说 1111 1111 1111 1111 1111 1111 1111 1011是补码 补码,反码加1后得源码 转换成源码得0000 0000 0000 0000 0000 0000 0000 0101 这个数是5,加上符号就是-5 1)左移位运算符()能将运算符左边的运算对象向左移动运算符右侧指定的位数(在低位补0)。 2)“有符号”右移位运算符()则将运算符左边的运算对象向右移动运算符右侧指定的位数。 “有符号”右移位运算符使用了“符号扩展”:若值为正,则在高位插入0;若值为负,则在高位插入1。 3)Java也添加了一种“无符号”右移位运算符(),它使用了“零扩展”:无论正负,都在高位插入0。这一运算符是C或C++没有的。 4)若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。 只有右侧的5个低位才会用到。这样可防止我们在一个int数里移动不切实际的位数。 若对一个long值进行处理,最后得到的结果也是long。此时只会用到右侧的6个低位,防止移动超过long值里现成的位数。 但在进行“无符号”右移位时,也可能遇到一个问题。若对byte或short值进行右移位运算,得到的可能不是正确的结果(Java 1.0和Java 1.1特别突出)。 它们会自动转换成int类型,并进行右移位。但“零扩展”不会发生,所以在那些情况下会得到-1的结果。 在进行位运算时,需要注意以下几点。 (1)和的区别是:在执行运算时,运算符的操作数高位补0,而运算符的操作数高位移入原来高位的值。 (2)右移一位相当于除以2,左移一位(在不溢出的情况下)相当于乘以2;移位运算速度高于乘除运算。 (3)若进行位逻辑运算的两个操作数的数据长度不相同,则返回值应该是数据长度较长的数据类型。 (4)按位异或可以不使用临时变量完成两个值的交换,也可以使某个整型数的特定位的值翻转。 (5)按位与运算可以用来屏蔽特定的位,也可以用来取某个数型数中某些特定的位。 (6)按位或运算可以用来对某个整型数的特定位的值置l。 3.位运算符的优先级 ~的优先级最高,其次是、和,再次是&,然后是^,优先级最低的是|。 二, 按位异或运算符^ 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。即:0^0=0, 1^0=1, 0^1=1, 1^1=0 例如000100010^0=0,0^1=1 0异或任何数=任何数 1^0=1,1^1=0 1异或任何数-任何数取反 任何数异或自己=把自己置0 (1)按位异或可以用来使某些特定的位翻转,如对第2位和第3位翻转,可以将数行按位异或运算。          00000110//1010 0001 ^ 0x06 = 1010 0001 ^ 6 (2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现: ??? ab??? a=a^b;   //a??? b=b^a;   //b??? a=a^b;   //a(3)异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a. 三,Java 中除了二进制的表示方法: 由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。? 但,二进制数太长了。比如int?? 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:? 0000?? 0

文档评论(0)

bhzs + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档