原码反码补码
计算机储存符号的时候,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

浙公网安备 33010602011771号