关于课上实验中对小数的处理中出现的问题涉及到原码,反码,补码的问题,所以在网上进行了一下搜索。
在原码,反码,补码中的解释可得知,无论是哪一种码,能够表示的数的范围是-2^(位数-1)+1至2^(位数-1)-1;

原码:二进制的在最高位数若为1, 则表示这个数为正数,最高位数为0,表示负数,其值大小就是最高位数除外的二进制转换成10进制的大小,最高位数表示符号;

反码:二进制的在最高位数若为1, 则表示这个数为正数,最高位数为0,表示负数,正数的值就是最高位数除外的二进制转换成10进制的大小,负数的值是正数按位取反的值。

补码:二进制的在最高位数若为1, 则表示这个数为正数,最高位数为0,表示负数,正数的值就是最高位数除外的二进制转换成10进制的大小,负数的值是正数按位取反的值在加上1所得的值。

假如有一计算机,是4位,那对这4位进行计算。通过了解,可以取-7至7的值。
假如有两个数5,-1,计算他们的加法;

原码:
5/2=2...1;
2/2=1...0;
1/2=0...1;
即5用二进制表示0101;
-1用二进制表示1001;
原码5+(-1)则表示 1110;
表示-6;
所以原码不能用来计算

反码:
5用二进制表示0101;
-1用二进制表示1110;
两数相加,0011(位数超过4的部分舍去);
表示3;
反码同样不能用来计算。

补码:
5用二进制表示0101;
-1用二进制表示1111;
两数相加,用二进制表示:0100;
表示4;
此时表达正确,故计算机是用补码表示加减。

在程序中测试的代码如下:

package wei;

public class Wei {

    public static int getString(String a)
{
int a1=0;
for(int i=0;i<4;i++)
{
if(a.charAt(3-i)=='1')
a1+=(1<<(i));
}
// if(a.charAt(0)=='1')
// a1=-a1;
return a1; }
public static int add(int a,int b)
{
int c=0;
c+=(((a+b)&8)>>3!=1)?((a+b)&7):-((a+b)&7);
return c;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
String a=new String("0101");
String b=new String("1001");
System.out.println("原码表示5+(-1)="+add(getString(a),getString(b)));
b="1110";
System.out.println("反码码表示5+(-1)="+add(getString(a),getString(b)));
b="1111";
System.out.println("补码码表示5+(-1)="+add(getString(a),getString(b)));
} }

实验截图如下:

Java学习--反码 原码 补码简析的更多相关文章

  1. Java语法基础课 原码 反码 补码

    原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 反码的表示方法是:正数的反码是其本身:负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. 补码的表示方法是在反码的基础 ...

  2. (7)java基础知识-原码、反码、补码、运算符

    一.原码.反码.补码 原码 一个数转化成二进制. 用最高位来表示正负,最高位为0表示正数,最高位为1表示负数. 例如: short i=5: 因为在java里short占2个字节转化成二进制就是 00 ...

  3. Java课后总结-原码、补码、反码

    1.原码.补码.反码的定义和表示方法. 数在计算机中是以二进制形式表示的. 数分为有符号数和无符号数. 原码.反码.补码都是有符号定点数的表示方法. 一个有符号定点数的最高位为符号位,0是正,1是副. ...

  4. java基础知识-原码,反码,补码

    1.正数:原码,反码,补码:都一样. 2.负数:和正数的储存方式不同,负数都是以补码形式存储的. <1>负数的补码 把负数的原码除了符号位取反后再+1. <2>负数的原码 把对 ...

  5. C正数负数的原码补码反码以及内存地址分析

    #include<stdio.h> void swap(int a, int b); void main1(){ int i = 10; //正数的原码 00000000 00000000 ...

  6. JAVA JVM常见内存参数配置简析

    JVM常见内存参数配置简析   常见参数 -Xms .-Xmx.-XX:newSize.-XX:MaxnewSize.-Xmn(-XX:newSize.-XX:MaxnewSize) 简析 1.-Xm ...

  7. 剑指offer-二进制中1的个数-进制转化-补码反码原码-python

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示.   ''' 首先判断n是不是负数,当n为负数的时候,直接用后面的while循环会导致死循环,因为负数 向左移位的话最高位补1 ...

  8. Java虚拟机运行时内存区域简析

    figure:first-child { margin-top: -20px; } #write ol, #write ul { position: relative; } img { max-wid ...

  9. .Net Framework4.5.2 源码命名空间简析

    Miscosoft目前除.Net Core开源外,对于.Net4.5.1 , 4.5.2等后续版本同样开源.资源中包含sln,csproj等以方便我们在vs中打开它们,不过我们不能编译它,因为它缺少r ...

随机推荐

  1. ubuntu服务器切换语言

    如果在安装Ubuntu Server时选择了中文,在系统安装完毕后,默认是中文,在操作时经常会显示乱码,如果需要设置回英文,则修改/etc/default/locale,将 LANG="cn ...

  2. phpstorm 格式化代码

    MAC 安装phpcs.phpcbf composer global require 'squizlabs/php_codesniffer=*' Changed current directory t ...

  3. 使用libsvm实现文本分类

    @Hcy(黄灿奕) 文本分类,首先它是分类问题,应该对应着分类过程的两个重要的步骤,一个是使用训练数据集训练分类器,另一个就是使用测试数据集来评价分类器的分类精度.然而,作为文本分类,它还具有文本这样 ...

  4. (转)Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发

    http://blog.csdn.net/yerenyuan_pku/article/details/52902851 前面我们已经学会了Spring4.2.5+Hibernate4.3.11+Str ...

  5. 汇编3栈帧,参数传递,串操作,混合汇编,x64,asm文件

    基础知识2 选择结构 通过判断 + 条件跳转指令来实现 循环结构 通过判断 + 条件跳转指令来实现(会有一个向上跳转的语句) 函数调用约定 C调用约定: 由外部平衡栈 标准调用约定 : 由函数内部平衡 ...

  6. golang结构体排序 - 根据下载时间重命名本地文件

    喜M拉Y下载音频到手机,使用ximalaya.exe 解密[.x2m]为[.m4a]根据文件下载创建时间,顺序重命名文件,方便后续播放. 源码如下:package main import ( &quo ...

  7. Vue 2.0 右键菜单组件 Vue Context Menu

    Vue 2.0 右键菜单组件 Vue Context Menu https://juejin.im/entry/5976d14751882507db6e839c

  8. activitmq+keepalived+nfs 非zk的高可用集群构建

    nfs 192.168.10.32 maast 192.168.10.4 savel 192.168.10.31 应对这个需求既要高可用又要消息延迟,只能使用变态方式实现 nfs部署 #yum ins ...

  9. input_shape { dim: 1 dim: 3 dim: 224 dim: 224 }

    http://blog.csdn.net/u010417185/article/details/52619593

  10. 日常:论我的T3是如何苟掉的

    说起来都是泪啊 T3的bfs一直不对,我想死. 考试时候苟了两个小时,死活找不到错误(因为lca和离散化都码出来了,太乱) 最后把bfs单独提出来,发现在bfs里面输出的f[ly][0]都是正确的,到 ...