当前位置:首页 » 编程语言 » java移位运算符

java移位运算符

发布时间: 2022-01-16 18:10:55

java的移位运算

全错。
在java中,对byte型进行位移操作,那么在移位进行之前,它们会自动转换成一个int,得到的结果也是int
第一题-17:11111111
11111111
11111111
11101111
(无符号右移2位)后为
00111111
11111111
11111111
11111011
=
1073741819
同上
第二题为:00011111
11111111
11111111
11111010
第三题为0

⑵ java 移位运算

>>是有符号的,你想下负数,往右移动,最大是多少?你试试有符号右移100试试,还是-1。到头了。想过零就得无符号

⑶ java 位移运算

首先要执行移位操作。。必须将byte转换成int。。。

bt的二进制表示为1000 0001
转换成int后二进制表示为 11111111 11111111 11111111 1000 0001

先执行b>>3,右移三位变为:11111111 11111111 11111111 1111 0000
再执行b<<3,左移三位变为: 1111111 11111111 11111111 1000 0000
bt 是byte类型。。所以再截断。。。取1000 0000
第一位是符号位,1表示负数。。。所以结果就是-128(2的七次方)

同样的分析方法。。。。
先表示成int的二进制反码表示方式。。。
11111111 11111111 11111111 1101 0000
右移三位变成:1111111 1111111 1111111 1111 1010
左移三位变成:11111111 11111111 11111111 1101 0000
截断变成 1101 000
这个反码表示就是-48
希望能帮到你~!

⑷ java中的移位运算符怎么理解

就是移位呗,比如 \n 输出一个换行

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

-4的二进制表示为1111 1111 1111 1011
i>>3 右移3位,移出的不管,左端补1 变为1111 1111 1111 1111 这是-1的二进制表示,所以结果为-1.
i>>5 同理。

具体原理:
先来说一下怎么得出负数的二进制。原码,反码,补码,这三个概念搞清。
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移位运算符>>>和>>的区别

“>> 右移,高位补符号位” 这里右移一位表示除2
“>>> 无符号右移,高位补0”; 与>>类似
“<< 左移” 左移一位表示乘2,二位就表示4,就是2的n次方

⑺ Java移位运算符问题

有符号右移会保留最高位的符号位,从次高位开始逐位右移填0;而无符号右移会将符号位一起右移,并将高位全部填0。
例:对于一个byte类型的数10010100来说,有符号右移2位变为10000101,而无符号右移2位变为00100101。前者仍然是一个负数,而后者变成了正数。
左移只有有符号的,没有无符号左移。

⑻ java中左移运算

不是java任何语言都没有, 位运算中左移跟符号没有关系的, 因为最高位就是符号位
例如8位的byte中最高位如果是 1那就表示负数 如果是左移一位, 那么最高位就会丢掉, 最低位补0 1111 1111 << 1 就会变成 1111 1110

⑼ java移位运算

这个试一下就知道了
比如-2 假定只有8位 1000 0010
如果是原码 那么就是1000 0010 >>1 =1000 0001 这就是-1
如果是补码 就是1111 1110>>1 =1011 1111 这就是-63了 (当然 如果是其他位数肯定不是-63)
不过-2>>1是-1 所以是操作的原码

⑽ Java中左移位运算

左移三位就是乘以8啊 ,你这样记:左移n位就是乘以2的n次方

热点内容
绿色linux 发布:2024-11-14 12:56:11 浏览:349
游戏本缓存 发布:2024-11-14 12:55:28 浏览:649
微软提供的编译软件 发布:2024-11-14 12:55:16 浏览:17
长沙java培训机构哪家好 发布:2024-11-14 12:40:53 浏览:228
外存储器硬盘能存储的高清电影数 发布:2024-11-14 12:33:23 浏览:265
python分号作用 发布:2024-11-14 12:31:50 浏览:223
方舟编译器下载要钱吗 发布:2024-11-14 12:29:20 浏览:62
jspoa源码 发布:2024-11-14 12:21:31 浏览:420
不记得了密码怎么办 发布:2024-11-14 12:18:58 浏览:442
python字符串的大小 发布:2024-11-14 12:17:24 浏览:222