「java移位补码」java原码补码

博主:adminadmin 2022-12-22 08:24:07 630

本篇文章给大家谈谈java移位补码,以及java原码补码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

关于Java的算术右移运算符

你说的右移应该是整数除法里面提到的吧。

整数除法总是zero-round,即商总是向靠近0的数方向进行舍入。

因为要向0靠近,所以负数在除2的幂之前会先加上一个偏移量2的k次方减1(2k-1,k为右移的位数)以修正

假设8位有符号表示:

则-5的补码为 1111 1011

右移一位: 1111 1101

上面的结果是-3的补码,和实际不符(-5/2 = -2)

加上修正值: 1111 1011 + 2的一次方减1 = 1111 1011 + 1 = 1111 1100

然后再右移一位:1111 1110 = -2的补码!

java:进行位运算的时候,为什么操作正数不需要先转为补码再操作,而操作负数需要先转为补码??

因为二进制数规定负数最高位标识为1,当左移时,高位会丢失,丢失了最高标识位就会变成一个正数,而负数右移时标识位会被移进有效数值位,令移出结果变成一个很大的正数,所以先转补码,不管左右移动最后都把1反转就可得到结果值,这样省去判断左右移动及最后赋值的工作,(位移及转补比起判断及赋值效率高很多)

负数移位操作

负数左移: 直接乘以2的移位数次方

负数右移:先求出该负数的原码,然后符号位不变,按位取反后加1得到补码,对补码进行右移,高位补1,最后根据移位后的值,符号位不变,按位取反后加1(补码的补码是原码)得到移位后的值的原码,也就得出了移位后的真实值。

例如

-51 (java为例,java移位操作都是int,int在内存中占32位)

-5的原码是    100…101

反码是           111…010

补码是           111…011

移位               111…101

取反+1           100…011 =-3

java 中的 ~ 取补码的详细意思是什么 ?

~就是取反的意思。就是把那个数字的二进制位,原来是0的变为1,原来是1的变为0.而二进制补码表示的数字(现在的计算机几乎都是用的二进制补码来表示的)进行这样的操作就等于取相反数再减一。所以~5就是-5-1=-6.而后面那个~a-b就是~5-3,而~5=-6所以就是-6-3=-9了。

对于二进制补码的数字的操作,如果你是学计算机专业的学生,那么会在计算机基础之类的课程里面学的。如果不是学计算机专业的,知道这个结论就可以了。

java移位

//看看这个例子吧

public class Adder {

public static void main(String[] args) {

int a = 0;

System.out.println("a的二进制表示: " + Integer.toBinaryString(a));

int b=-15 ;

System.out.println("b的二进制表示: " + Integer.toBinaryString(b));

int c=2 ;

System.out.println("c的二进制表示: " + Integer.toBinaryString(c));

a=bc;//b无符号右移c位

//把b:11111111111111111111111111110001 右移 2 位

//a :00111111111111111111111111111100

System.out.println("a的二进制表示: " + Integer.toBinaryString(a));

int r = 0x3ffffffc;//r是a(00111111111111111111111111111100)的16进制表示;

System.out.println(r);

}

}

关于java移位补码和java原码补码的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。