zoukankan      html  css  js  c++  java
  • 原码反码补码

     计算机储存符号的时候,0表示+;1表示-;

    计算机字长为8位;

    原码是符号加上真值的绝对值,用第一位表示符号,其余位表示值;

    [+1]原=00000001;

    [-1]原=10000001;

    反码:

    正数的反码就是自己本身原码;

    负数的反码是在原码的基础上符号位不变,其余的各位取反;

    [+1]原=[00000001]原=[00000001]反;

    [-1]原=[10000001]原=[11111110]反;

    补码

    正数的补码就是本身原码;

    负数的反码是在原码的基础上,符号位不变,其余取反,最后加1;

    [+1]原=[00000001]原=[00000001]反=[00000001]补;

    [-1]原=[10000001]原=[11111110]反=[11111111]补;

    正整数的原码反码补码都是一样的;

    将整数转化成二进制的原码

    package afterclass;
    
    import java.util.Scanner;
    
    public class a1 {
        public static void main(String[] args)
        {
            Scanner sc=new Scanner(System.in);
            System.out.print("请输入i的值");
            int i=sc.nextInt();
            int[] b;
            int t=0;
            b=new int[8];
            for(int j=7;j<0;j--)
            {
                b[j]=0;
            }
            if(i>=0)
            {
                b[7]=0;
            }
            else
            {
                b[7]=1;
                i=-i;
            }
            for(int j=0;j<7;j++)
            {
                b[j]=i%2;
                i=i/2;
                if(i==0)
                {
                    t=j;
                    break;
                }
                
            }
            
            System.out.print(b[7]);
            for(int j=6;j>t;j--)
            {
                System.out.print(b[j]);
                
            }
            
            for(int j=t;j>=0;j--)
            {
                System.out.print(b[j]);
            }
        }
    }

    反码

    package afterclass;
    
    import java.util.Scanner;
    
    public class a1 {
        public static void main(String[] args)
        {
            Scanner sc=new Scanner(System.in);
            System.out.print("请输入i的值");
            int i=sc.nextInt();
            int[] b;
            int t=0;
            int d=0;
            b=new int[8];
            int[] c=new int[8];
            for(int j=7;j<0;j--)
            {
                b[j]=0;
            }
            if(i>=0)
            {
                b[7]=0;
                d=i;
            }
            else
            {
                b[7]=1;
                d=-i;
            }
            for(int j=0;j<7;j++)
            {
                b[j]=d%2;
                d=d/2;
                if(d==0)
                {
                    t=j;
                    break;
                }
                
            }
            if(i<0)
            {
            c[7]=b[7];
            
            for(int j=6;j>t;j--)
            {
                c[j]=b[j];
                
                
            }
            
            for(int j=t;j>=0;j--)
            {
                c[j]=b[j];
                
            }
            for(int j=6;j>=0;j--)
            {
                if(c[j]==0)
                {
                    c[j]=1;
                }
                else
                {
                    c[j]=0;
                }
            }
            for(int j=7;j>=0;j--)
            {
                System.out.print(c[j]);
            }
            }
            else
            {
                for(int j=7;j>=0;j--)
                {
                    System.out.print(b[j]);
                }
            }
        }
    }

    2的原码是00000010;反码是00000010;补码是00000010;

    -1的原码是10000001;反码是11111110;补码是11111111;

    package zy01;
    
    public class js02 {
        public static void main(String[] args)
        {
        int a=2;
        int b=-1;
        System.out.println(a&b);
        System.out.println(a|b);
        System.out.println(a^b);
        }
    }

    与&如果两个相应的二进制形式的对应的位数都为1,则结果为1,记为同1为1,否则为0。

    2的反码是00000010;

    -1的反码是11111110;

    结果为       00000010;2

    2的补码是00000010;

    -1的补码是11111111;

    结果为      00000010;2

    运算符  或“|”  :有1为1,否则为0

    2的反码是00000010;

    -1的反码是11111110;

    结果是     11111110;

    减一:11111101;

    然后按位取反(符号位不变)得到的是原码:10000010;-2

    2的补码是00000010;

    -1的补码是11111111;

    结果是   11111111;

    减一:11111110;

    然后按位取反(符号位不变)得到的是原码:10000001;-1

    当运算结果符号位是1为负数,那就需要进行减1操作,再按位取反,这个时候得到的才是正确的结果

    运算符  异或^相同为0,不同为1

    2的反码是00000010;

    -1的反码是11111110;

    结果是     11111100;

    减一:11111011;

    然后按位取反(符号位不变)得到原码:10000100;-4

    2的补码是00000010;

    -1的补码是11111111;

    结果是      11111101;

    减一:11111100;

    然后按位取反(符号位不变)得到原码:10000011;-3

    根据与 或 异或  的反码补码的运算得处java中是根据补码来运算的;

  • 相关阅读:
    LeetCode——Add Binary
    UVA
    mac平台adb、tcpdump捕手android移动网络数据包
    代码农民提高生产力
    Atitit. 拉开拉链zip文件 最佳实践实施 java c# .net php
    Arc Object开发,概述2
    ArcGIS Object开发,概述
    GDI 编程基础简介
    科目三考试档位与速度匹配总结、及考试操作技巧
    倾斜摄影
  • 原文地址:https://www.cnblogs.com/1234yyf/p/11537799.html
Copyright © 2011-2022 走看看