说明:本文参考了文章《Java按位取反运算符“~”》,链接:https://blog.csdn.net/smilecall/article/details/4245447


补充:位运算符(~、&、|、^,<<、>>)都是在补码(计算机存储的形式)上操作。(原答案如下)


1.二进制数在内存中是以补码的形式存放的;补码首位是符号位,0表示此数为正数,1表示此数为负数

如:
正数9——>具有符号位的二进制原码01001(首位表示符号位)——>补码01001((第2条会讲补码怎么来的)——>在内存中的形式0***1001(*表示无效位,其数量取决于分配的内存空间)

负数-1——>具有符号位的二进制原码11(首位表示符号位)——>补码11(第2条)——>在内存中的形式1***1(*表示无效位)

2. 正数、负数的补码是什么?

①正数的补码、反码都是其二进制本身,只是需要在首位填加0,作为符号位。

如:

正数9——>二进制01001(首位表示符号位的二进制形式)——>补码01001(不变)

②负数的反码:符号位1不变,后面有效位数全部取反(有效位是指该数的无符号二进制位,如9的有效位指1001,-1的有效位指1);

 负数的补码:其反码再加1得到,即原码通过符号位不变,且有效位按位取反再加1也可得到;

如:

负数-1——>二进制原码11——>反码10(符号位1不变,后面有效位数全部取反)

负数-1——>二进制原码11——>补码11【反码的有效位加1(此处不考虑符号)或者是原码符号位不变,有效位按位取反再加1】
3. 计算机输出内存数据方式
将内存中的补码转换成原码,进行显示;
例如:
正数9——>内存中补码0***1001——>转换成原码0***1001(不变)——>输出+9
负数-5——>内存中补码1***011——>转换成原码1***101(补码中符号位后面的有效位减1,再取反,即负数补码的逆过程)——>-5
4. 按位取反运算符“~”的原理
按位取反运算符是将内存中的补码按位取反(包括符号位)
例如:
9(在内存中以补码0***1001存放)——>按位取反操作“~”——>变成补码1***0110(这明显变成了一个负数补码,因为符号位是1)——>输出时:补码减1,再取反得到原码1***1010——>输出-10
-1(在内存中以补码1***1存放)——>按位取反操作“~”——>变成补码0***0(这明显是正数补码,因为符号位是0)——>输出时:得到原码0***0——>输出0

注:所有的取反操作、加1、减1操作,都在有效位进行;***代表的无效位,分析时不要管。

Java按位取反运算符“~”的工作原理的更多相关文章

  1. Java垃圾回收机制的工作原理

    Java垃圾回收机制的工作原理 [博主]高瑞林 [博客地址]http://www.cnblogs.com/grl214 获取更多内容,请关注小编个人微信公众平台: 一.Java中引入垃圾回收机制的作用 ...

  2. Java中的HashMap的工作原理是什么?

    问答题23 /120 Java中的HashMap的工作原理是什么? 参考答案 Java中的HashMap是以键值对(key-value)的形式存储元素的.HashMap需要一个hash函数,它使用ha ...

  3. Java语言的特点与工作原理

    Java语言的特点 1.简单性 Java语言与我们常听到的C++语言很像,但是没有C++那么繁琐.因为Java就是在C++之上设计出来的,设计者把C++的一些特性去掉了,这些特性在实际开发中,程序员也 ...

  4. Java 内存管理、JVM 工作原理与 Java 运行时系统

    Java 虚拟机规范中说明:所有的对象实例(all class instances)以及数组都要在堆上分配: the heap is the runtime data area from which ...

  5. Java GC机制简要总结(Java垃圾回收的基本工作原理)

    第一次编辑 2019-05-07 01:09:39 垃圾回收的对象 程序中的不可用对象(不存活的对象,没有任何引用),或者无用的变量信息等,在程序中长期存在会逐渐占用较多的内存空间,导致没有足够的空间 ...

  6. Java工作原理:JVM,内存回收及其他

    JAVA虚拟机系列文章 http://developer.51cto.com/art/201001/176550.htm Java语言引入了Java虚拟机,具有跨平台运行的功能,能够很好地适应各种We ...

  7. Java按位运算符之按位取反

    一 数据储存形式 二进制在内存中以补码的形式存在. 补码首位是符号位,0表示该数是正数,1表示该数是负数.   例如:   数值 带符号的二进制原码 (首位表示符号位) 补码 内存中的形式 (*表示无 ...

  8. 详解Java GC的工作原理+Minor GC、FullGC

    详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...

  9. Java中GC的工作原理

    转文: 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能提高整个 ...

随机推荐

  1. C++ 获取特定进程的CPU使用率<转>

    C++ 获取特定进程的CPU使用率 近来发现笔记本在关闭屏幕后风扇转得特别快,打开屏幕后看任务管理器,风扇马上减速,也没有发现大量占用CPU的进程.于是想写一个小程序在后台记录每个进程的CPU使用情况 ...

  2. 9 MySQL--多表查询

    多表查询: http://www.cnblogs.com/linhaifeng/articles/7267596.html 1.多表连接查询 2.符合条件连接查询 3.子查询 一.准备表 #建表 cr ...

  3. nodejs-supervisor

    小技巧——使用 supervisor 如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会发现,无论你修改了代码的哪 ...

  4. rook 删不掉的问题

    # kubectl get crd -o yamlapiVersion: v1items:- apiVersion: apiextensions.k8s.io/v1beta1  kind: Custo ...

  5. 03-SSH综合案例:商城表关系分析

    1.2   设计页面: 静态页面: 1.3    数据库分析与设计: 一般是一个Java类就对应一个表,有哪些类?那看你有哪些实体啊?一般一个模块对应一个实体 有用户模块就会有用户的一个实体,就会有用 ...

  6. C#获取mp3文件时长、解决发布到服务器无法使用问题

    首先引用COM组件:Microsoft Shell Controls And Automation,需要引用1.2版本的,1.0的会出问题. 这里需要注意DLL的属性Embed Interop Typ ...

  7. 关于在线文本编辑器防XSS注入攻击问题

    跨站脚本攻击,又称XSS代码攻击,也是一种常见的脚本注入攻击.例如在下面的界面上,很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入例如<script>alert('这是一 ...

  8. MYISM表并发写请求过多 导致无法被读取解决方案

    MyISAM锁调度是如何实现的呢,这也是一个很关键的问题.例如,当一个进程请求某个MyISAM表的读锁,同时另一个进程也请求同一表的写锁,此时MySQL将会如优先处理进程呢?通过研究表明,写进程将先获 ...

  9. boost之date_time库

    最近开了boost库的学习,就先从日期时间库开始吧,boost的date_time库是一个很强大的时间库,用起来还是挺方便的.以下算是我学习的笔记,我把它记录下来,以后便于我复习和查阅. #inclu ...

  10. NLTK和Stanford NLP两个工具的安装配置

    这里安装的是两个自然语言处理工具,NLTK和Stanford NLP. 声明:笔者操作系统是Windows10,理论上Windows都可以: 版本号:NLTK 3.2 Stanford NLP 3.6 ...