文档章节

原码,补码,反码区分

o
 osc_isezqdgg
发布于 2019/09/18 22:46
字数 907
阅读 4
收藏 0

精选30+云产品,助力企业轻松上云!>>>

原码,补码,反码是计算机二进制中的存储方式。

原码:是最简单的机器数表示法。用最高位表示符号位,‘1’表示负号,‘0’表示正号。其他位存放该数的二进制的绝对值。

反码:正数的反码还是等于原码

负数的反码就是他的原码除符号位外,按位取反。

补码:正数的补码等于他的原码
负数的补码等于反码+1。

在计算机当中是使用补码来存储的。

例如

整型(int) 为45 整型为4字节 32位

原码: 00000000 0010 0111

反码:1111 1111 1101 1000

补码:000 0000 0010 0111

整型(int)-45

原码:1000 0000 0010 0111

反码:1111 1111 1101 1000

补码:1111 1111 1101 1001

用Java语言实现 int 类型转换如下:

  1 package ClassroomTest;
  2 
  3 import java.util.Scanner;
  4 
  5 public class Second {
  6 
  7 
  8     
  9     @SuppressWarnings("resource")
 10     public static void main(String[] args) {
 11         int s[] =new int[32];
 12         int y[]=new int[32];
 13         int f[]=new int[32];
 14         int i=0;
 15         int c;
 16         Scanner sc=null;
 17         System.out.println("请输入一个整数:");
 18         sc=new Scanner(System.in);
 19         int a=sc.nextInt();
 20         if(a>=0) {  //整数判断
 21         while(a>=1) {   //存入原码
 22             c=a%2;
 23             s[i]=c; 
 24             a=a/2;
 25             i++;
 26         }
 27          int j;
 28          j=31;
 29         for(i=0;i<s.length;i++) {
 30                 y[j]=s[i];
 31                 j--;
 32             }
 33         System.out.println();
 34        System.out.println("原码:");  //输出原码   
 35        for(i=0;i<y.length;i++) {     //符号位为0
 36            System.out.print(y[i]);
 37               if((i+1)%4==0) {
 38                   System.out.print(" ");
 39             }
 40         }
 41        System.out.println();
 42        System.out.println("反码:");  //输出反码  全部取反
 43        for(i=(y.length-1);i>=0;i--) {
 44            if(y[i]==0) {
 45                f[i]=1;
 46            }else {
 47                f[i]=0;
 48            }
 49        }
 50        for(i=0;i<f.length;i++) {
 51            System.out.print(f[i]);
 52               if((i+1)%4==0) {
 53                   System.out.print(" ");
 54             }
 55        }
 56        System.out.println();
 57        System.out.println("补码:");   //输出补码  与原码相同
 58        for(i=0;i<y.length;i++) {
 59            System.out.print(y[i]);
 60               if((i+1)%4==0) {
 61                   System.out.print(" ");
 62             }
 63         }
 64     }else {  //当输入整数为负数时
 65         a=-a;
 66         while(a>=1) {
 67             c=a%2;
 68             s[i]=c;
 69             a=a/2;
 70             i++;
 71         }
 72          int j;
 73          j=31;
 74         for(i=0;i<s.length;i++) {
 75                 y[j]=s[i];
 76                 j--;
 77             }
 78         y[0]=1;
 79         System.out.println();
 80        System.out.println("原码:");  //输出原码
 81        for(i=0;i<y.length;i++) {     //符号位为1
 82            System.out.print(y[i]);
 83               if((i+1)%4==0) {
 84                   System.out.print(" ");
 85             }
 86         }
 87        System.out.println();
 88        System.out.println("反码:");  //输出反码
 89        for(i=(y.length-1);i>=0;i--) {  //符号位不变,其他数位取反
 90            if(y[i]==0) {
 91                f[i]=1;
 92            }else {
 93                f[i]=0;
 94            }
 95        }
 96        f[0]=1;
 97        for(i=0;i<f.length;i++) {
 98            System.out.print(f[i]);
 99               if((i+1)%4==0) {
100                   System.out.print(" ");
101             }
102        }
103        System.out.println();
104        System.out.println("补码:");  //输出补码
105        i=31;
106        f[31]=f[31]+1;
107        while(i>=0) {    //转换为补码  在反码基础上+1
108            if(f[i]==2) {
109                f[i]=0;
110                f[i-1]=f[i-1]+1;
111            }else
112            {
113                f[i]=1;
114            }
115            i--;
116        }
117        
118        for(i=0;i<f.length;i++) {
119            System.out.print(f[i]);
120               if((i+1)%4==0) {
121                   System.out.print(" ");
122             }
123         }
124         
125     }
126         
127 }
128 }

运行结果如下:

请输入一个整数:
-32

原码:
1000 0000 0000 0000 0000 0000 0010 0000
反码:
1111 1111 1111 1111 1111 1111 1101 1111
补码:
1111 1111 1111 1111 1111 1111 1110 0000

 

请输入一个整数:
32

原码:
0000 0000 0000 0000 0000 0000 0010 0000
反码:
1111 1111 1111 1111 1111 1111 1101 1111
补码:
0000 0000 0000 0000 0000 0000 0010 0000

 

收获:

正整数的原码,反码,补码没有特殊地方,不需要特别记忆;但是对于负整数的原码要注意符号位为1,并且要转换为正整数之后再求二进制,对于反码,注意除去符号位之外的其他位数取反,反码在反码基础上加一(注意不要忘记按照二进制计算)。

 

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
补码,反码,原码

用一两句话就可以描述清楚原码,补码,反码的算法。 正数的反码和补码都是和原码相同。 原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负...

notAcoder
2013/10/04
69
0
原码、反码、补码 和 移码

完全可以用一两句话就描述的很清楚。 原码: 如果机器字长为n,那么一个数的原码就是用一个n位的二进制数,其中最高位为符号位:正数为0,负数为1。剩下的n-1位表示概数的绝对值。 例如: X=...

swearyd457
2013/12/04
97
0
原码、反码、补码,负数表示法

原码 5 => 0b101,1 => 0b1 ,-1 => -0b1, bin(-1) 反码 正数的反码与原码相同;负数的反码符号位不变其余按位取反 补码 正数的补码与原码相同;负数的补码符号位不变其余按位取反后+1 负数...

osc_zy2cp8tz
2019/02/25
0
0
原码、反码、补码产生及其关系

转载链接:https://www.zhihu.com/question/20159860/answer/71256667 原码、反码、补码的引入是为了方便计算机的按位计算,下面详述通过一步步演进如何方便计算机计算的,我们以4bit存储数字...

arvinzhao
2018/05/10
35
0
原码、反码、补码相互之间的关系

原码、反码、补码知识整理 在计算机中机器是识别不了正数(+)、负数(-)的,所以早期给计算机设定了0代表正数,-1代表负数,称为符号位,置于最前面 1.原码 正数转换为二进制位,二进制位就是这...

zhouym_
2019/04/15
4
0

没有更多内容

加载失败,请刷新页面

加载更多

Xcode中的版本与版本 - Version vs build in Xcode

问题: I have an app that I developed with Xcode 3 and recently started editing with Xcode 4. In the target summary I have the iOS application target form with fields: identifie......

javail
22分钟前
7
0
如何在Python中将字典键作为列表返回? - How to return dictionary keys as a list in Python?

问题: In Python 2.7 , I could get dictionary keys , values , or items as a list: 在Python 2.7中 ,我可以将字典键 , 值或项作为列表获取: >>> newdict = {1:0, 2:0, 3:0}>>> newd......

技术盛宴
今天
17
0
2020世界人工智能大会开幕首日 百度与浦发银行达成战略合作

本文作者:y****n 7月9日,2020世界人工智能大会开幕首日,百度与浦发银行签署战略合作协议,将在人工智能、金融科技等多个领域进一步深化合作。双方将优势互补,实现人工智能技术在金融领域...

百度开发者中心
昨天
26
0
Java中C ++ Pair 的等价物是什么? - What is the equivalent of the C++ Pair in Java?

问题: Is there a good reason why there is no Pair<L,R> in Java? 有没有一个很好的理由说明Java中没有Pair<L,R> ? What would be the equivalent of this C++ construct? 这个C ++构造的......

富含淀粉
今天
18
0
中国饭店协会数据表明

记者了解到,中国饭店协会数据表明,2018年全国餐饮收入42716亿元,同比增长9.5%.根据国家统计局数据显示,截至2017年底,限额以上餐饮行业的从业人数达到2232万人,巨大的餐饮市场背后,餐饮行业的...

asd369
今天
35
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部