
正文
java往右移的代码 java 右移
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java带符号右移运算符
第1图第六行java往右移的代码的意思就是java往右移的代码,把十进制数7转换为二进制数。再把这个二进制数向右移两位,移空的位补上数,得到一个新的二进制数。再把这个二进制数转为十进制数。赋给变量。
相关问答
Q1: Java编程实现一个能循环地自左向右移动的动画程序。
效果图
参考代码
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MoveTextFrame extends JFrame {
JLabel jl;//文字标签
int speed=2;//移动速度
public MoveTextFrame() {
jl = new JLabel("文字动画");
jl.setForeground(Color.RED);
add(jl);
setSize(380, 100);//窗口大小
setLocationRelativeTo(null);//窗口居中
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
//设置定时器, 每隔25毫秒,改变一次文字标签java往右移的代码的位置
Timer t = new Timer(25, new ActionListener() {
public void actionPerformed(ActionEvent e) {
int x = jl.getX()+speed;//计算移动后java往右移的代码的位置
if(x=390){//如果超过就指定像素,就重新从左边开水移动
x=-30;
}
jl.setLocation(x, jl.getY());//更新位置
//repaint();
}
});
t.start();
}
public static void main(String[] args) {
new MoveTextFrame();
}
}
Q2: Java中右移运算
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
操作数每右移一位,相当于该数除以2。
注:正数的原码,反码,补码一致;负数的反码是除去符号位外其余取反,负数补码是除去符号位外其余取反,末尾加1。 (二进制最左边一位是符号位)
带符号右移运算符()
将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。
无符号右移运算符()
运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃
-12 = -1
-1: 原码:1000 0001 反码:1111 1110 补码:1111 1111
右移2位:1111 1111 ( 用补码操作,并用 1 补齐左边位)
再找反码:1000 0000 ( 除去左边符号位,其余取反 )
再找原码:1000 0001 = -1 ( 还是将反码末尾加1 )
-52=-2
-5: 原码:1000 0101 反码:1111 1010 补码:1111 1011
右移2位:1111 1110 ( 用补码操作,并用 1 补齐左边位)
再找反码:1000 0001 ( 除去左边符号位,其余取反 )
再找原码:1000 0010 = -2 ( 还是将反码末尾加1 )
-52=1073741822
-5:
原码:1111 1111 1111 1111 1111 1111 1111 0101
反码:1111 1111 1111 1111 1111 1111 1111 1010
补码:1111 1111 1111 1111 1111 1111 1111 1011
右移2位:0011 1111 1111 1111 1111 1111 1111 1110=1073741822
Q3: 关于JAVA 中的位移运算>>
char的范围是0~65535.用2进制表示,就是0000 0000 0000 0000到1111 1111 1111 1111
byte的范围是-128~127.用2进制表示,就是1000 0000到0111 1111.
看到了么,一个char要用两个byte才能存下来。
例如假设cData=1101 0101 0001 0001:
8就是说,右移8个bit,二进制的.右移8bit,那个1101 0101就往右移动8位。因为首位是1,所以前面全部补1,得到1111 1111 1101 0101.然而这时候,想得到的是1101 0101,而不需要前面那8个1,所以用0xff来处理。0xff就是0000 0000 1111 1111,就是这个bit在两个操作数都是1的情况下使答案bit为1,就是是取后8个bit。所以0000 0000 1111 1111 1111 1111 1101 0101=0000 0000 1101 0101.这样,就取得了cData的前8bit.存入bData[0].
0无运算,只是写着好看的。0xffcData直接取后8bit,这个例子里,就是说0000 0000 1111 1111 1101 0101 0001 0001=0000 0000 0001 0001.这样,就取得了cData的后8bit.存入bData[1].
Q4: 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往右移的代码和java 右移的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






