1、实例

先来看个例子

public static void main(String[] args) {

System.out.println(~2);

}

~在Java中是按位取反的意思,2是整形占4字节,其二进制表示为:

0000 0000 0000 0000 0000 0000 0000 0010

按位取反后的结果为:

1111 1111 1111 1111 1111 1111 1111 1101

但是输出结果却是-3。

2、原码、反码、补码

Java中存储的是有符号的数,在计算机中有符号的数是以补码的形式存储的。

2.1、原码

原码的二进制表示:最高位是符号位(1表示负数,0表示整数),其余位表示值的大小。

1和-1的原码表示为

1000 0000 0000 0000 0000 0000 0000 0001 //-1的原码

0000 0000 0000 0000 0000 0000 0000 0001 //1的原码

2.2、反码

正数的反码是其本身

负数的反码:符号位不变,其余位按位取反。

-1的反码为

1111 1111 1111 1111 1111 1111 1111 1110

2.3、补码

正数的补码是其本身

负数的补码:在反码的基础上加1

-1的补码为

1111 1111 1111 1111 1111 1111 1111 1111

3、分析

回到最初的问题:2在计算机中是以补码的形式存储的,由于正数的补码是其本身,所以2的补码为

0000 0000 0000 0000 0000 0000 0000 0010

~2表示按位取反,则对2的补码进行按位取反,结果为

1111 1111 1111 1111 1111 1111 1111 1101

从取反后的补码可知是负数,而负数转二进制规律:

1、取负数的绝对值的原码;

2、计算原码的反码;

3、对反码加一,获取补码。

我们可以反推出该负数绝对值的原码:

1、对补码减一,获取反码:1111 1111 1111 1111 1111 1111 1111 1100

2、将其按位取反获取原码:0000 0000 0000 0000 0000 0000 0000 0011

3、可知这个原码表示的是正数3,所以~2等于-3。

java 原码 补码,Java中的原码、反码和补码相关推荐

  1. java如何比较字符asc_Java中的Asc码与字符互相转化

    Java中的Asc码与字符互相转化 package com.test; public class Jm1 { private static int asnum; private static char ...

  2. 台式计算机国标码,在计算机中,国标码是属于什么码?

    满意答案 canrc258 推荐于 2016.08.02 采纳率:44%    等级:12 已帮助:10278人 1.汉字信息的编码知识 ⑴国标码:是指我国1981年公布的"中华人民共和国国 ...

  3. python源码剖析—— python中的字节码对象初探

    一.代码对象 每个初学python的人都会认为python是一种解释型语言,这个不能说错.但是python并不是真的对执行的python代码的每一行进行解释,虽然我们有一个所谓的"解释器&q ...

  4. java相册制作,文章中含有源码

    package cn.demo2;import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java. ...

  5. Java点名器,文章中内含源码

    package cn.OrderNameMachine;import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdap ...

  6. 原码、反码、补码及减法运算

    负数采用补码的形式表示,这是为了硬件操作的方便,把减法也转换成加法来运算 引入反码.补码是为了解决减法的问题,换句话数就是解决负数的问题,正数不存在这些问题,所以它的反码补码就是它本身 正数的反码.补 ...

  7. 【无标题】源码、反码、补码

    一 . 源码.反码.补码 源码:整形的源码是4个字节,即32个比特位 源码的第一个数是符号位,0表示为正数,1是为负数 如:a = 10 0000000000000000000000000000101 ...

  8. java中补码与位运算,Java:二进制(原码、反码、补码)与位运算

    一.二进制(原码.反码.补码) 二进制的最高位是符号位("0"代表正数,"1"代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1.  原码 ...

  9. Java 数字用二进制表示,以及原码,反码,补码、负数的二进制表示

    首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规 ...

最新文章

  1. MySQL实验作业_MySQL作业
  2. 使用lisp函数控制cursor
  3. 成功解决File frozen importlib._bootstrap, line 219, in _call_with_frames_removed ImportError: DLL lo
  4. matlab如何创建table,table,matlab,中table数据类型,创建,调用,访问
  5. boost::mp11::mp_max_element相关用法的测试程序
  6. java 创建线程_【80期】说出Java创建线程的三种方式及对比
  7. [大数据之Yarn]——资源调度浅学
  8. 用matlab求解工作时间调度问题,置换流水车间调度问题的MATLAB求解.doc
  9. Linux 命令简单介绍第二课笔记
  10. 根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)
  11. Java笔记01-数组相关
  12. 工作流实战_09_flowable 流程实例挂起与激活
  13. 链上结构化产品Ribbon将推出基于看跌期权的资管产品Puts Theta Vault
  14. 计算机网络技术实验,计算机网络技术实验一
  15. 使用sama5d4硬件解码器
  16. 电视家鸿蒙系统,ZNDS智能电视强烈推荐:机顶盒上好用的四款软件!
  17. matlab plotyy legend,Matlab如何在plotyy中设置legend可以显示四条不同的曲线描述
  18. zuul+ribbon实现负载均衡
  19. linux获取本机ip地址函数,Linux编程获取本机IP地址
  20. Tunnel端口配置

热门文章

  1. 微信小程序解密encryptedData报错pad block corrupted
  2. chmod,rwx Linux文件属性笔记221107
  3. Linux目录的rwx权限
  4. XSS常用Payload
  5. 无法访问netflix服务_如何修复:Netflix错误代码UI-113
  6. 电力设备内部绝缘油泄漏检测图像数据集(300多张数据,VOC标签)
  7. 时序逻辑电路功能分析
  8. 怎样安装WIN7系统
  9. mycat的主从配置
  10. php 防止sql注入