java 原码 补码,Java中的原码、反码和补码
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中的原码、反码和补码相关推荐
- java如何比较字符asc_Java中的Asc码与字符互相转化
Java中的Asc码与字符互相转化 package com.test; public class Jm1 { private static int asnum; private static char ...
- 台式计算机国标码,在计算机中,国标码是属于什么码?
满意答案 canrc258 推荐于 2016.08.02 采纳率:44% 等级:12 已帮助:10278人 1.汉字信息的编码知识 ⑴国标码:是指我国1981年公布的"中华人民共和国国 ...
- python源码剖析—— python中的字节码对象初探
一.代码对象 每个初学python的人都会认为python是一种解释型语言,这个不能说错.但是python并不是真的对执行的python代码的每一行进行解释,虽然我们有一个所谓的"解释器&q ...
- java相册制作,文章中含有源码
package cn.demo2;import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java. ...
- Java点名器,文章中内含源码
package cn.OrderNameMachine;import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdap ...
- 原码、反码、补码及减法运算
负数采用补码的形式表示,这是为了硬件操作的方便,把减法也转换成加法来运算 引入反码.补码是为了解决减法的问题,换句话数就是解决负数的问题,正数不存在这些问题,所以它的反码补码就是它本身 正数的反码.补 ...
- 【无标题】源码、反码、补码
一 . 源码.反码.补码 源码:整形的源码是4个字节,即32个比特位 源码的第一个数是符号位,0表示为正数,1是为负数 如:a = 10 0000000000000000000000000000101 ...
- java中补码与位运算,Java:二进制(原码、反码、补码)与位运算
一.二进制(原码.反码.补码) 二进制的最高位是符号位("0"代表正数,"1"代表负数): Java中没有无符号数: 计算机以整数的补码进行运算: 1. 原码 ...
- Java 数字用二进制表示,以及原码,反码,补码、负数的二进制表示
首先我们要对原码.反码和补码有个了解: 1.所谓原码就是二进制定点表示法,即最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. 2.反码表示法规 ...
最新文章
- MySQL实验作业_MySQL作业
- 使用lisp函数控制cursor
- 成功解决File frozen importlib._bootstrap, line 219, in _call_with_frames_removed ImportError: DLL lo
- matlab如何创建table,table,matlab,中table数据类型,创建,调用,访问
- boost::mp11::mp_max_element相关用法的测试程序
- java 创建线程_【80期】说出Java创建线程的三种方式及对比
- [大数据之Yarn]——资源调度浅学
- 用matlab求解工作时间调度问题,置换流水车间调度问题的MATLAB求解.doc
- Linux 命令简单介绍第二课笔记
- 根据一个属性,剔除 Json 中重复元素(删除 JSON 中重复的部分)
- Java笔记01-数组相关
- 工作流实战_09_flowable 流程实例挂起与激活
- 链上结构化产品Ribbon将推出基于看跌期权的资管产品Puts Theta Vault
- 计算机网络技术实验,计算机网络技术实验一
- 使用sama5d4硬件解码器
- 电视家鸿蒙系统,ZNDS智能电视强烈推荐:机顶盒上好用的四款软件!
- matlab plotyy legend,Matlab如何在plotyy中设置legend可以显示四条不同的曲线描述
- zuul+ribbon实现负载均衡
- linux获取本机ip地址函数,Linux编程获取本机IP地址
- Tunnel端口配置