Java基础 -3.5
我觉得上一篇不是很严谨啊
我认为这个逻辑还是正确的
- 原码、反码、补码:
(1)在Java中,所有数据的表示方式都是以补码形式来表示
如果没有特别的说明,Java 中的数据类型默认为int,int数据类型的长度为4个字节,就是32bit的意思,
(2)正数:原码、反码、补码相同
(3)负数:符号位为1,其余各位是对原码取反,然后整个数加1
(4)~按位取反 会将目标数的补码的各位取反
(5)负数的补码是其绝对值的原码取反,末尾再加1
~正数的流程:
- 首先十进制数会被转化为二进制补码的形式;
- 然后上一步得到的二进制补码的各位取反(~发挥作用);
- 上一步得到的二进制数-1,然后取反,得到目标值(这个目标值是指~正数这个负数)的绝对值的补码;
- 上一步的补码转化为十进制正数,然后+负号,就得到了目标值。
~负数的流程:
- 首先将负数的绝对值转化为二进制补码的形式;
- 将上一步得到的二进制补码的各位取反再+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的更多相关文章
- Java基础知识(壹)
写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- 【JAVA面试题系列一】面试题总汇--JAVA基础部分
JAVA基础 基础部分的顺序: 基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法 线程的语法,集合的语法,io 的语法,虚拟机方面的语法 每天几道,持续更新!! 1.一个". ...
- 最适合作为Java基础面试题之Singleton模式
看似只是最简单的一种设计模式,可细细挖掘,static.synchronized.volatile关键字.内部类.对象克隆.序列化.枚举类型.反射和类加载机制等基础却又不易理解透彻的Java知识纷纷呼 ...
- java基础练习 字符串,控制流,日历,日期等
1,对基本控制流程的一些练习 package org.base.practice3; import org.junit.Test; /** * Created with IntelliJ IDEA. ...
- Java基础知识【下】( 转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608360 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- Java基础知识【上】(转载)
http://blog.csdn.net/silentbalanceyh/article/details/4608272 (最终还是决定重新写一份Java基础相关的内容,原来因为在写这一个章节的时候没 ...
- java基础学习03(java基础程序设计)
java基础程序设计 一.完成的目标 1. 掌握java中的数据类型划分 2. 8种基本数据类型的使用及数据类型转换 3. 位运算.运算符.表达式 4. 判断.循环语句的使用 5. break和con ...
- Java基础加强之多线程篇(线程创建与终止、互斥、通信、本地变量)
线程创建与终止 线程创建 Thread类与Runnable接口的关系 public interface Runnable { public abstract void run(); } public ...
- java基础知识小总结【转】
java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...
随机推荐
- HGsoft-downloader
[NEW]HGsoft-downloader上线了! 给你提供一个简洁无广告的电脑软件下载平台,换个角度下载电脑软件. 网站地址:Go
- php的排序函数
sort(array,sortingtype); 参数 描述 array 必需.规定要进行排序的数组. sortingtype 可选.规定如何比较数组的元素/项目.可能的值: 0 = SORT_REG ...
- 优化mysql
数据库设计和表创建时就要考虑性能 sql的编写需要注意优化 分区 分表 分库 1.数据库设计和表创建时就要考虑性能 mysql数据库本身高度灵活,造成性能不足,严重依赖开发人员能力.也就是说开发人员能 ...
- yii2的防御csrf攻击机制
csrf,中文名称:跨站请求伪造,可以在百度上搜索资料,详细了解这一方面的概念.对于我们是非常有帮助的.yii2的csrf的实现功能是在yii\web\request类实现功能的.request类中的 ...
- Win10-IIS注册asp 此操作系统版本不支持此选项 错误解决方法
现象再现: 今日在Win10上面ASP.NET网站突然不能跑了, 过程再现: 根据资料提示重新注册ASPNET_IIS.exe -i 直接提示: C:\WINDOWS\system32>c:\w ...
- Java的Path、Paths和Files
前言 因为这几天被java.nio的这几个接口和工具类卡到了,就顺便地查了一波文档以及使用方法,这篇其实更像是API的复制粘贴,只不过我在注释里多写了一些output和注意事项,看不惯API的可以选择 ...
- 每个Java开发人员都应该知道的4个Spring注解
这是每个Java开发人员都应该知道的最重要的Spring注解.感谢优锐课老师对本文提供的一些帮助. 随着越来越多的功能被打包到单个应用程序或一组应用程序中,现代应用程序的复杂性从未停止增长.尽管这种增 ...
- mybatis批量插入和更新
批量插入 <insert id="add" parameterType="java.util.List"> insert all <forea ...
- spring feign依赖包
1.feign依赖包 <properties> <java.version>1.8</java.version> <spring-cloud.version& ...
- PAT 1010 Radix (二分)
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...