首页 > 编程知识 正文

java移位,java移位加密算法

时间:2023-12-29 20:31:45 阅读:330626 作者:YRFJ

本文目录一览:

java中b>>a是什么意思

将b的值右移a位。

是java中的移位运算符,是右移位,因为数据存储是二进制的所以左移1相当于乘以2的1次方,右移相当于乘以2的-1次方。

例如:右移运算符,num1,相当于num除以2,num2,相当于num除以2再除以2。

java移位运算问题:“-1>>1”和“-1>>>1”有何差别?

这个是带符号右移

这个是无符号右移

-1的二进制反码表示为 11111111 11111111 11111111 11111111

-11的结果是 : 1111111 1111111 11111111 1111111

-11的结果是: 01111111 11111111 1111111 11111111

无符号右移后前面补0,而带符号右移是补符号位,也就 是第一位,负数补1,正数补0

Java的优点:

java是纯面向对象编程的语言;

平台无关性 (一次编译,到处运行;Write Once,Run Anywhere);

java提供了许多内置的类库,通过这些类库,简化了开发人员的设计工作,同时缩短了项目开发时间;

提供了对Web应用开发的支持,例如,Applet,Servlet,和JSP可以用来开发Web应用程序,Socket,RMI可以用来开发分布式应用程序的类库。

Java 移位>>运算符,看代码。

-4的二进制表示为1111 1111 1111 1011

i3 右移3位,移出的不管,左端补1 变为1111 1111 1111 1111 这是-1的二进制表示,所以结果为-1.

i5 同理。

具体原理:

先来说一下怎么得出负数的二进制。原码,反码,补码,这三个概念搞清。

1、原码:一个正数,按照绝对值大小转换成的二进制数;一个负数按照绝对值大小转换成的二进制数,然后最高位补1,称为原码。

比如 00000000 00000000 00000000 00000101 是 5的 原码。

10000000 00000000 00000000 00000101 是 -5的 原码。

备注:

比如byte类型,用2^8来表示无符号整数的话,是0 - 255了;如果有符号, 最高位表示符号,0为正,1为负,那么,正常的理解就是 -127 至 +127 了.这就是原码了,值得一提的是,原码的弱点,有2个0,即+0和-0(10000000和00000000);还有就是,进行异号相加或同号相减时,比较笨蛋,先要判断2个数的绝对值大小,然后进行加减操作,最后运算结果的符号还要与大的符号相同;于是,反码产生了。

2、反码:正数的反码与原码相同,负数的反码为对该数的原码除符号位外各位取反[每一位取反(除符号位)]。

取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

比如:正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101

负数10000000 00000000 00000000 00000101 的反码则是 11111111 11111111 11111111 11111010。

反码是相互的,所以也可称:10000000 00000000 00000000 00000101 和 11111111 11111111 11111111 11111010互为反码。

备注:还是有+0和-0,没过多久,反码就成为了过滤产物,也就是,后来补码出现了。

3、补码:正数的补码与原码相同,负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1.

比如:10000000 00000000 00000000 00000101 的补码是:11111111 11111111 11111111 11111010。

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

备注:1、从补码求原码的方法跟原码求补码是一样的 ,也可以通过完全逆运算来做,先减一,再取反。

2、补码却规定0没有正负之分

所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

搞懂二进制表示后,再来说一下左移右移运算符。

左移运算是将一个二进制位的操作数按指定移动的位数向左移位,移出位被丢弃,右边的空位一律补0。右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位或者一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为0,负数的符号位为1。(均由机器来定)

So,为什么得到-1知道了吧~~~

java中位移操作和乘法的区别

ava中有三种移位运算符

: 左移运算符,num 1,相当于num乘以2

: 右移运算符,num 1,相当于num除以2

: 无符号右移,忽略符号位,空位都以0补齐

对于:

无符号右移,忽略符号位,空位都以0补齐

value num -- num 指定要移位值value 移动的位数。

无符号右移的规则只记住一点:忽略了符号位扩展,0补最高位 无符号右移运算符 只是对32位和64位的值有意义

java 移位运算

“系统先用b对32求余” 看这句了吗。

int 一共32位,移32时,已经全部是0。

你希望只移32位,b就不要多于32。开始移位之前做一下判断。

java如何用移位符将一个数字加32?

只通过位移符无法得到结果,因为位移符向左每位移一位相当于乘以2,向左位移5位相当于乘以2×2×2×2×2=32,所以十进制数字1向左位移5为可以得到1×32=32。其本质是十进制数的1转换为二进制数后为0000 0001,其向左位移5位后为0010 0000,转换为十进制数就是32。

位移相当于乘法,所以我们无法只通过位移符使一个数加32,那么就这样吧:

运行结果:

1 5 = 32,所以1 + 1 5 = 33, 2 + 1 5 = 34, 3 + 1 5 = 35。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。