java原码补码反码关系解析

本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下

原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式

反码:把原码的二进制统统反过来,0变成1,1变成0

补码:负数的反码加1,就是负数的补码

例子1:

十进制整数 -5,-5的原码101,-5的反码1,010,-5的补码1,011, 
所以,-5的反码是-2,-5的补码是-3,其中前面的"1,",表示正数负数

例子2:

十六进制  -ff9B  
原码  11111111111110011011
反码  00000000000001100100    十进制100
补码  00000000000001100100   十进制101
原来正确的操作流程是,把16进制ff9B转成2进制,然后直接反码,再算补码,就是温度数据

代码验证:

package comtest.example.admin.znum;

/**
 * Created by wrs on 2019/6/5,16:25
 * projectName: Testz
 * packageName: comtest.example.admin.znum
 * 输入一个真值(整数)求它的原码,反码,补码
 */

import java.util.Scanner;

public class Test {
 public static void main(String[] args) {
 System.out.println("True value--> original code");
 System.out.println("Please enter an integer!!!!!");
 Scanner sc = new Scanner(System.in);
 int value = sc.nextInt();
 StringBuilder syuan = new StringBuilder();
 if (value > 0) {
 String Bvalue = Integer.toBinaryString(value);//将一个整数转换成字符串类型的二进制数
 int n = Bvalue.length(); //二进制的数字的个数n
 syuan.append("0,");
 syuan.append(Bvalue);
 System.out.println("Original code " + syuan); //原码
 System.out.println("Complement code " + syuan); //补码
 System.out.println("Inverse code " + syuan); //反码

// System.out.println("二进制数的n "+n);
 } else if (value < 0) {
 int value2 = Math.abs(value); //负数的绝对值
 int value3 = value2 - 1; //减一求反,求补码
 String Bvalue = Integer.toBinaryString(value2);
 String BFvalue = Integer.toBinaryString(~value2);
 int n = Bvalue.length();
 String str = BFvalue.substring(BFvalue.length() - n); //截取反码的后几个数
 syuan.append("1,");
 syuan.append(Bvalue);
 System.out.println("Original code is :" + syuan);
 System.out.println("Inverse code is :1," + str);
 String BBvalue = Integer.toBinaryString(~value3);
 String str3 = BBvalue.substring(BFvalue.length() - n);
 System.out.println("Complement code is :1," + str3);
 } else {
 System.out.println("0 Original code is not only");
 System.out.println("[+0]riginal code 00.....0");
 System.out.println("[-0]riginal code 10.....0");
 System.out.println("--------------------------------------------");
 System.out.println("0 Complement code is not only");
 System.out.println("[+0]和[-0] Complement code 00.....0");
 System.out.println("---------------------------------------------");
 System.out.println("0 Inverse code is not only");
 System.out.println("[+0]Inverse code00..........0");
 System.out.println("[-0]Inverse code11..........1");
 }
 System.out.println("-------------------------------------------------");

 }
}

运行效果:

-------------------------------------------------
True value--> original code
Please enter an integer!!!!!
-65435
Original code is :1,1111111110011011
Inverse code is :1,0000000001100100
Complement code is :1,0000000001100101
-------------------------------------------------

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java中原码、反码与补码的问题分析

    1.原码.反码和补码定义 1.原码 将最高位作为符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示).为了简单起见,我们用1个字节来表示一个整数.     +7的原码为: 00000111     -7的原码为: 10000111 2.反码 一个数如果为正,则它的反码与原码相同:一个数如果为负,则符号位为1,其余各位是对原码取反.为了简单起见,我们用1个字节来表示一个整数:     +7的反码为:00000111     -7的反码为: 11111000 3.补码 补码:

  • java原码补码反码关系解析

    本文为大家解析了java原码补码反码的关系,供大家参考,具体内容如下 原码:不管源数据是十进制还是十六进制,统统将数字转成二进制形式 反码:把原码的二进制统统反过来,0变成1,1变成0 补码:负数的反码加1,就是负数的补码 例子1: 十进制整数 -5,-5的原码101,-5的反码1,010,-5的补码1,011,  所以,-5的反码是-2,-5的补码是-3,其中前面的"1,",表示正数负数 例子2: 十六进制  -ff9B   原码  11111111111110011011 反码  

  • C语言基础 原码、反码、补码和移码详解

     原码.反码.补码.移码的作用? 在计算机内,机器数有无符号和带符号数之分.无符号数表示正数,在机器数中没有符号位.位于无符号数,若约定小数点的位置在机器数的最低位之后,则是纯整数:若约定小数点的位置在机器数的最高位之前,则是纯小数.对于带符号数,机器数的最高位是表示正.负的符号位,其余位则表示数值.若约定小数点的位置在机器数的最低数值位之后,则是纯整数:若约定小数点的位置在机器数的最高数值位之前(符号位之后),则是纯小数. 为了便于运算,带符号位的机器数可采用原码.反码和补码等不同的编码方法,

  • 详解原码、反码与补码存储与大小

    详解原码.反码与补码存储与大小 原码: 如果机器字长为N个bit,那么一个数的原码就是N位二进制数,最高位 是符号位,1代表负数,0代表正数. 反码: 正数的反码就是原码,负数的反码就是符号位不变,其他取反. 补码: 正数的补码与其原码相同:负数的补码是在其反码的末位加1. (计算机中的数都是以补码形式存储的) 补码的形式是为了进行正负数二进制的加减操作 char为1个字节,8个bit位,看看内存中是怎么存储的 十六进制 二进制(补码) 反码 原码 实际值 char a = 127; //7f

  • Java为什么使用补码进行计算的原因分析

    我们主要要解决的问题就是负数的表示,而众所周知,绝对值相等的两个正负数之和为0. 假设我们有正数 0000 0000 0000 1111,我们如何表示其相反数呢?一般我们的思路是,找一个数,跟它相加的结果等于0,但是我们发现,要找出一个与它相加后结果等于0的数还是要略加思考一下的(因为要计算进位),所以,为何不找出一个与它相加后结果是1111 1111 1111 1111的数,然后该数+1即是我们所要的答案啦. 于是,很容易的, 0000 0000 0000 1111 + 1111 1111 1

  • 原码, 反码与补码基础知识详细介绍

    原码, 反码,补码详解 本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,

  • c语言 数据存储与原码 反码 补码详细解析

    目录 前言 1.数据的类型介绍 1.1整形家族 2.整形在数据内存中的存储 2.1 原码 反码和补码(三种整型数的表示方法) 2.2大小端字节序序的介绍 2.3 练习 3.浮点型在内存中的存储 3.1 先举一个例子 3.2 浮点数储存的规则 前言 学习本章你会了解: 1.数据类型详细介绍 2.整形在内存中的存储:以及了解原码.补码.反码 3.大小端字节序的介绍和判断 4.浮点型在内存中的存储解析 1.数据的类型介绍 在学习数据储存之前,让我们先认识一下数据类型.以下这些数据类型是我们初学c语言时

  • Java源码解析之HashMap的put、resize方法详解

    一.HashMap 简介 HashMap 底层采用哈希表结构 数组加链表加红黑树实现,允许储存null键和null值 数组优点:通过数组下标可以快速实现对数组元素的访问,效率高 链表优点:插入或删除数据不需要移动元素,只需要修改节点引用效率高 二.源码分析 2.1 继承和实现 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {

  • Java源码解析之接口Collection

    一.图示 二.方法定义 我们先想一想,公司如果要我们自己去封装一些操作数组或者链表的工具类,我么需要封装哪些功能呢?不妨就是统计其 大小,增删改查.清空或者是查看否含有某条数据等等.而collection接口就是把这些通常操作提取出来,使其更全面.更通用,那现在我们就来看看其源码都有哪些方法. //返回集合的长度,如果长度大于Integer.MAX_VALUE,返回Integer.MAX_VALUE int size(); //如果集合元素总数为0,返回true boolean isEmpty(

  • Java源码解析之平衡二叉树

    一.平衡二叉树的定义 平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1 .它是一种高度平衡的二叉排序树.意思是说,要么它是一棵空树,要么它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度之差的绝对值不超过1 .我们将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF (Balance Factor),那么平衡二叉树上所有结点的平衡因子只可能是-1 .0 和1. 这里举个栗子: 仔细看图中值为18的节点,18的节点的深度为2 .而它的右子树的深度为0,其差

随机推荐