我觉得上一篇不是很严谨啊

我认为这个逻辑还是正确的

  1. 原码、反码、补码:

    (1)在Java中,所有数据的表示方式都是以补码形式来表示

    如果没有特别的说明,Java 中的数据类型默认为int,int数据类型的长度为4个字节,就是32bit的意思,

    (2)正数:原码、反码、补码相同

    (3)负数:符号位为1,其余各位是对原码取反,然后整个数加1

    (4)~按位取反 会将目标数的补码的各位取反

    (5)负数的补码是其绝对值的原码取反,末尾再加1

~正数的流程:

  1. 首先十进制数会被转化为二进制补码的形式;
  2. 然后上一步得到的二进制补码的各位取反(~发挥作用);
  3. 上一步得到的二进制数-1,然后取反,得到目标值(这个目标值是指~正数这个负数)的绝对值的补码;
  4. 上一步的补码转化为十进制正数,然后+负号,就得到了目标值。

~负数的流程:

  1. 首先将负数的绝对值转化为二进制补码的形式;
  2. 将上一步得到的二进制补码的各位取反再+1,得到负数的二进制补码;
  3. 将上一步得到的负数的二进制补码的各位取反(~发挥作用);
  4. 上一步得到的二进制序列转化为十进制就是目标值。
  1. 取反(~)运算

(1)n=37 ,二进制数就是 100101

原码/补码/反码:00000000 00000000 00000000 00100101 =37

~n(对n的补码) 取反运算得:  11111111 11111111 11111111 11011010 

很明显,最高位是1,意思是取反后的数字为负数,负数的补码是其绝对值的原码取反,末尾再加1,因此,我们可将这个二进制数的补码进行还原:

首先,末尾减1得反码:11111111 11111111 11111111 11011001

其次,将各位取反得原码:00000000 00000000 00000000 00100110   这个就是n的绝对值形式,|n|=38   ,

所以,~n=-38,这个就是Java虚拟机的运算结果

(2)n= - 4, 取反 (~-4)。注意:Java中,所有数据的表示方式都是以补码形式

原码:10000000 00000000 00000000 00000100

反码:11111111 11111111 11111111 11111011

补码:11111111 11111111 11111111 11111100

对补码取反:00000000 00000000 00000000 00000011

因为是正数,所以补码等于原码等于反码= 3,所以~-4 = 3

public class zzz {
public static void main(String[] args) {
int i =-4;
//原码 1000 0000 0000 0000 0000 0000 0000 0100
//反码 1111 1111 1111 1111 1111 1111 1111 1011
//补码 1111 1111 1111 1111 1111 1111 1111 1100
//对补码求反
// 0000 0000 0000 0000 0000 0000 0000 0011
//3
System.out.println(~i); }
}
>>> 3 public class zzz {
public static void main(String[] args) {
int i =37;
//原码 0000 0000 0000 0000 0000 0000 0010 0101
//反码 0000 0000 0000 0000 0000 0000 0010 0101
//补码 0000 0000 0000 0000 0000 0000 0010 0101
//对补码求反
// 1111 1111 1111 1111 1111 1111 1101 1010
//-1
// 1111 1111 1111 1111 1111 1111 1101 1001
//取反
// 0000 0000 0000 0000 0000 0000 0010 0110
//32+4+2= 38
//加负号
// -38
System.out.println(~i); }
}
>>> -38

Java基础 -3.5的更多相关文章

  1. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  2. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  3. 【JAVA面试题系列一】面试题总汇--JAVA基础部分

    JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...

  4. 最适合作为Java基础面试题之Singleton模式

    看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...

  5. java基础练习 字符串,控制流,日历,日期等

    1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...

  6. Java基础知识【下】( 转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  7. Java基础知识【上】(转载)

    http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...

  8. java基础学习03(java基础程序设计)

    java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...

  9. Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)

    线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...

  10. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

随机推荐

  1. Python3.6打开EAIDK-610开发板(计算机通用)摄像头拍照并保存

    环境:python3.6 代码: import cv2 import os output_dir ='/home/openailab/Desktop/huahui/came/' i = cap = c ...

  2. Springmvc-crud-02错误(添加出现中文乱码)

    错误: 在进行添加页面时使用post请求,输入中文时会出现乱码 原因: post请求不支持gbk格式,使用字符编码过滤器,设置为UTF-8编码即可 注意配置请求的字符集和响应字符集 解决方案:需要放在 ...

  3. UITextField的内存泄漏问题

    背景: 项目中使用了Facebook的FBRetainCycleDetector框架检测内存泄漏问题. 登录VC的view中放置了一个UITextField对象. 产品的要求是当进入登录界面的时候,让 ...

  4. php中的elseif和else if

    以前的时候还没注意到,知道进入公司,看的代码多了点,时常看到elseif的分支,而我自己时常用的是else if,于是就注意到,他们既然都可以用,那么他们的却别在哪儿呢? 通过查询,原来,确实有点小小 ...

  5. python+树莓派实现IoT(物联网)数据上传到服务器

    环境:raspbian-stretch(2018-06-27) 树莓派:3代B型 1.树莓派设备,需要在野外也能拥有独立联网能力,那必不可少的需要使用物联网模块. 这里使用的是微雪的SIM868通讯模 ...

  6. Jmeter_正则表达式提取器_提取数组 & For Each 控制器

    1.举例: https://demodaojia.ecjia.com/ 提取黄色标注的这些内容 2. 3. 匹配数字:-1 表示匹配全部,0表示随机一个 4. 5.我们获取了10组数据,通过正则提取器 ...

  7. 【PAT甲级】1089 Insert or Merge (25 分)(插入排序和归并排序)

    题意: 输入一个正整数N(<=100),接着输入两行N个整数,第一行表示初始序列,第二行表示经过一定程度的排序后的序列.输出这个序列是由插入排序或者归并排序得到的,并且下一行输出经过再一次排序操 ...

  8. IoT生态不完善、与智能电视区别不大,荣耀智慧屏概念大于实际

    编辑 | 于斌 出品 | 于见(mpyujian) 前两天,华为荣耀略显"低调"地在北京召开了一场小型的媒体沟通会.在这场沟通会上,荣耀却颇为"重磅"地推出了坊 ...

  9. 洛谷 P1063 能量项链(区间DP)

    嗯... 题目链接:https://www.luogu.com.cn/problem/P1063 这道题首先要读懂题目,然后往上套区间dp,要转换成链式. AC代码: #include<cstd ...

  10. HTML-移动端-rem px vw vh 的转换

    vw/vh rem px 三者的转换(快速入门移动端页面编写) 1:三种单位的转换 2:如何适配移动端的不同设备 前提知识: 手机端的长宽是实际设计过程中的两倍 比如手机端是 750 * 1200 那 ...