问题

最近学习java 位操作,取反运算遇到了问题。

public class bitMpt {

public static void main(String[] args) {

int a = 128;

int b = 129;

int c = 2;

System.out.println("a and b result: "+(a&b));

System.out.println("a or b result: "+(a|b));

System.out.println("~ c result: "+(~c));

System.out.println("a ^ b result: "+(a^b));

}

}

c = 2 取反,10变01, 结果应该为1,但运行结果为-3。

知识点

java存储的是有符号数,在计算机中,有符号数通常是使用补码存储的。

原码

原码就是符号位加上真值的绝对值,即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 正数符号位为0,负数为1。

反码

正数的反码是其本身

负数的反码是在其原码的基础上,符号位不变,其余各个位取反.

例如:

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

补码

正数的补码就是其本身

负数的补码是在反码的基础上+1。

例如:

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

总结

所以回到一开始的问题,int a = 2 a在计算机中是以补码存储的。

对于2这个正数来说,补码、反码、原码都是相同的,又由于是数值型,在这里我先用八位bit来表示一下:

原码:0000 0010反码:0000 0010

补码:0000 0010

取反取反过程是在补码的基础上进行的,由于是按位取反,无论符号位还是数值位都要取反,所以结果如下:

取反后的补码: 1111 1101

换算为值那么取反后的补码的实际值是多少呢?我们需要先把他转化为原码,过程如下:

反码 = 1111 1101 - 1 = 1111 1100

原码 = 反码符号位不变,其余取反 = 1000 0011

所以,最后的值-3

java里面取反 怎么用_java 取反学习相关推荐

  1. java获取下一季末_java取当前周期、月初至月末、季度初至季度末日期。

    常用日历操作辅助类 @author steven 2010-08-10 @email:qing.tan@iwode.com */ public class CalendarUtil { private ...

  2. java 反编译项目_Java 7 –反编译项目硬币

    java 反编译项目 大家好,该是从2012年开始写作的时候了.正如您在其他博客中可能已经看到的那样,有一些更改可以使您使用Java编程时的开发人员生活变得更加轻松:Diamond运算符,Switch ...

  3. java从哪学到哪_Java JVM怎么学习啊?从哪方面入手?

    叮当猫咪 一. JVM的生命周期 1. JVM实例对应了一个独立运行的java程序它是进程级别 a) 启动.启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static vo ...

  4. 在java中班级的表示方法_Java基础班学习笔记(8)

    1:如何制作帮助文档(了解) (1)写一个类 (2)加入文档注释 (3)通过javadoc工具生成即可 javadoc -d 目录 -author -version ArrayTool.java 如何 ...

  5. java跳转控制语句有哪些_Java语言基础学习之流程控制语句和跳转控制语句实例分析...

    本文主要向大家介绍了Java语言基础学习之流程控制语句和跳转控制语句实例分析,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.流程控制语句 在一个程序执行的过程中,各条语句的执行顺 ...

  6. java没有指针和析构所以_Java程序员学习C++之构造函数和析构函数调用的时机

    今天看书忽然对这个地方有点模糊,尤其是析构函数在调用默认的析构函数和用户自己覆写的析构函数的时候有点意识模糊呢.写段代码总结下 #include usingnamespacestd; classBox ...

  7. java 斐波那契编程_Java实现Fibonacci(斐波那契)取余的示例代码

    Java实现Fibonacci(斐波那契)取余的示例代码 发布时间:2020-10-09 06:05:36 来源:脚本之家 阅读:78 作者:南墙 Description Fibonacci数列的递推 ...

  8. java取余位运算_java学习--高效的除模取余运算(n-1)hash

    没有测试过使用取余运算符和位运算符都做同一件事时的时间效率! 取余运算符% 如3除以2取余数 int a = a = a%; 结果为1 上面是传统的方式进行求余运算. 需要先将10进制转成2进制到内存 ...

  9. java 取余和取整_Java取整、取余

    参考链接:http://blog..net/wanlixingzhe/article/details/7359809 参考链接:http://bbs..net/topics/390677448(6楼) ...

最新文章

  1. 编程入门书籍-Python基础教程(第3版)
  2. http://www.secrepo.com 安全相关的数据获取源
  3. php从内存中获取源码_【PHP7源码分析】PHP内存管理
  4. java+testng接口测试入门
  5. 苹果修改应用商店规则:云游戏服务可上架 但游戏需从商店下载
  6. Javaparser使用
  7. 云计算ACP认证考试题库之101-200
  8. 美图大咖-电商图片处理软件
  9. 如何向iphone手机里导入音乐?
  10. windows与mac字体设置
  11. 中国零售科技创新企业榜TOP50:有TalkingData也有拼多多...
  12. Reduce-Rank Regression通俗解释及与其他降维方法的关系
  13. win7 计算机不显示收藏夹,win7系统下收藏夹无法使用的原因及解决方法
  14. Python爬虫入门教程 64-100 反爬教科书级别的网站-汽车之家,字体反爬之二
  15. redis的MULTI与PIPELINE
  16. Camunda 代码实现流程图
  17. 关于Excel表操作-通过gensim实现模糊匹配
  18. Bazel官方教程 -- 通用C++使用案例
  19. Qt连接sqlite数据库
  20. 大概描述一下PDM、PLM、ERP的联系与区别

热门文章

  1. iPhone 自带邮箱配置 QQ 邮箱、QQ 企业邮箱
  2. js实现浏览器中的前进、后退按钮
  3. 北上广深下调公积金贷款利率 每月少还上百元
  4. 周星驰,你别这么贬低自己好嘛,你已经很努力了!
  5. HTML+CSS静态页面网页设计作业——餐饮美食-武昌鱼(8页) HTML+CSS+JavaScript 使用html+css实现一个静态页面(含源码)
  6. c++ 小游戏《死亡游戏》
  7. 使用JS分页 span beta 3.0 完成封装的分页
  8. 2022年重庆自考本科流程是怎样的?
  9. 什么是闭包(Closure)?
  10. 经典/深度SfM有关问题的整理