重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
楼主你好!问题是这样的:
目前创新互联建站已为上千余家的企业提供了网站建设、域名、网络空间、网站托管维护、企业网站设计、梁河网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
先拿第一句来说
语句:System.out.println("000011112:" + (000011112));
中的00001111是八进制的数,能0开头的数是八进制数,而00001111用二进制表示为1001001001,数值前有22个0,一共有32位,左移2位后变为10010010,数值前有24个0,而10010010用十进制表示则为146。所以语句:System.out.println("000011112:" + (000011112));输出000011112:146。其他以0开头的数类推。但第二和第四个System.out.println()语句中的11000011是十进制的数,不能看作是二进制的也不能看作是八进制的数。楼主要看清。
public class MoveString { public static void main(String[] args) { String str = "hello world"; int step = 2; System.out.println(moveString(str, step)); } private static String moveString(String str, final int step) { if (str == null || step 0) { return null; } int len = str.length(); return new StringBuilder(str.substring(len - step % len)).append(str.substring(0, len - step % len)).toString(); } } 追问: 我怎么看不懂是什么意思呢? 回答: 你这个向右移几位其实就相当于将字符串最后的几位补到前面去...比如说你移动两位,其实就是将"hello world"最后的两位"ld"放到最前面 String类中的substring方法 就是用来进行字符串截取的
希望采纳
将一个数的各二进制位全部右移若干位,正数左补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
效果图
参考代码
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毫秒,改变一次文字标签的位置
Timer t = new Timer(25, new ActionListener() {
public void actionPerformed(ActionEvent e) {
int x = jl.getX()+speed;//计算移动后的位置
if(x=390){//如果超过就指定像素,就重新从左边开水移动
x=-30;
}
jl.setLocation(x, jl.getY());//更新位置
//repaint();
}
});
t.start();
}
public static void main(String[] args) {
new MoveTextFrame();
}
}