java代码实现移位算法 java代码实现移位算法怎么用
java左移运算符的问题,一定给分!
1.左移运算符
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、做网站、茶陵网络推广、小程序定制开发、茶陵网络营销、茶陵企业策划、茶陵品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供茶陵建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
左移运算符用“”表示,是将运算符左边的对象,向左移动运算符右边指定的位数,并且在低位补零。其实,向左移n 位,就相当于乘上2 的n 次方,例如下面的例子。
public class data17
{
public static void main(String[] args)
{
int a=2;
int b=2;
System.out.println("a 移位的结果是:"+(ab));
}
}
运行结果
a 移位的结果是:8
分析上面的程序段:
首先从本质上来分析,2 的二进制是00000010,它向左移动2 位,就变成了00001000,即8。如果从另一个角度来分析,它向左移动2 位,其实就是乘上2 的2 次方,结果还是8。
2.右移运算符
右移运算符用符号“”表示,是将运算符左边的对象向右移动运算符右边指定的位数,并且在高位补0,其实右移n 位,就相当于除上2 的n 次方。
public class data18
{
public static void main(String[] args)
{
int a=16;
int b=2;
System.out.println("a 移位的结果是:"+(ab));
}
}
运行结果
a 移位的结果是:4
分析上面的程序段:从本质上来分析,16 的二进制是00010000,它向右移动2 位,就变成了00000100,即4。如果从另一个角度来分析,它向右移动2 位,其实就是除以2 的2 次方,结果还是4。
3.带符号的右移运算符
带符号的右移运算符用符号“”表示,是将运算符左边的运算对象,向右移动运算符右边指定的位数。如果是正数,在高位补零,如果是负数,则在高位补1,先看下面一个简单的例子。
public class data19
{
public static void main(String[] args)
{
int a=16;
int c=-16;
int b=2;
int d=2;
System.out.println("a 的移位结果:"+(ab));
System.out.println("c 的移位结果:"+(cd));
}
}
运行结果
a 的移位结果:4
c 的移位结果:-4
分析上面的程序段:
a 的值是16,转换成二进制是00010000,让它右移两位成00000100 即4。
c 的值是-16,转换成二进制是11101111,让它右移一位成11111011 即-4。
java位移问题
移位操作:
左移:向左移位,符号后面的数字是移了多少位,移的位用0补齐,例如2进制数01111111左移一位后变为11111110,移位是字节操作。
右移:向右移位,符号后面的数字是移了多少位,移的位用符号位补齐,例如01111111右移一位后变为00111111,而10000000右移一位后变成11000000,因为符号位是1。
你的例题num用2进制表示为1111 1111 1111 1111 1111 1111 1110,向左移了4次位就变成1111 1111 1111 1111 1111 1110 0000。十分简单
奖励就不用了。
0x代表16进制,0xFFFFFFE就是一个十六进制的数,化成2进制的数就是:
1111 1111 1111 1111 1111 1111 1110,这个数太大了,化成十进制就是:16的7次方减2。
移位都是在2进制下做的操作,硬件的实现也很简单,向左移其实就是把每一个2进制位都向左移1位,这样不就像10进制的数乘了个十么。比如11左移一位就是110,但是本来存这个数的内存只有两位,现在多了一位,那就舍呗,于是就变成10了。你这个数大,但是道理是一样的。
右移稍复杂点,还举个简单的例子,11向右移一位,11还可以看成啥呢,就是011.0,于是右移一位就是,01.10,舍掉小数不就是01了。但是这是错的,就是符号位的问题,计算机死规定最高位是符号位,也又做了一个死规定,就是11不能看成011.0,11前面的位必须看成和符号位一样的数,也就是看成111.0,那右移一位不就是11.10,舍去小数就变成11了,如果是01,就看成001.0,右移一位就变成00.10,于是就是00。关键是符号位,也就是最高位,最高位是1,右移就把最高位补1,如果最高位是0,右移就把最高位补0。死规定,就得记。
右移就是这点麻烦,左移挺简单。
你这个数最高位是1,所以右移就补1,但是你给的例子是左移的(箭头指的方向),所以不用想那么多,移了4位就是这么个样子,不用再多说了吧,应该理解了,要还不懂就说哪不懂。
抱歉哦,马虎了,int型变量是4字节,所以0xffffffe由于不到4字节,所以前面用0补齐,也就是0x0ffffffe,这是4个字节.
左移1位一次:0x1fffffffc
左移1位两次:0x3fffffff8
左移1位三次:0x7fffffff0
左移1位四次:0xfffffffe0
这样就没问题了。
java中如何实现移位循环?
可以自己定义一个方法,先把右移的最低位保存起来(左移就是最高位),再用移一位,再把最低位加上去,循环n次
java循环矩阵移位
import java.util.Scanner;
public class FiveJuZheng {
public static void main(String[] args) {
int[][] arr = { { 1, 2, 3, 4, 5 }, { 6, 7, 8, 9, 10 },
{ 11, 12, 13, 14, 15 }, { 16, 17, 18, 19, 20 },
{ 21, 22, 23, 24, 25 } };
int x = 0 , y = 0;
boolean flag = true;
Scanner sc = new Scanner(System.in);
do {
System.out.println("请输入两个位移量(注:不能超过5或者-5,用空格分开)");
String readline = sc.nextLine();
String[] numbers = readline.split(" ");
if(numbers.length 2){
System.out.println("警告!输入有误:少于两个数!");
continue;
}
x = Integer.parseInt(numbers[0]);
y = Integer.parseInt(numbers[1]);
if(numbers.length == 2 x 5 x -5 y 5 y -5){
flag = false;
}else{
System.out.println("警告!输入有误:数值须在(-5 ,5)内,不包括-5和5!");
}
} while (flag);
arr = xidc(arr, x);
arr = yidc(arr, y);
for (int i = 0; i 5; i++) {
for (int j = 0; j 5; j++) {
System.out.print(arr[i][j] + "\t");
}
System.out.println();
}
}
/**
* 处理数组下沉
* @param arr 源数组
* @param x 下沉行数
* @return 下沉后的数组
*/
private static int[][] xidc(int[][] arr, int x) {
int[] temp = new int[5];
if (x 0) {
x = 5 + x; //输入为负时换成对应的正数行 上浮2行 等于 下沉3行
}
for (int k = 0; k x; k++) {
for (int i = 4; i 0; i--) {
int line = i - 1;
temp = arr[i];
arr[i] = arr[line];
arr[line] = temp;
}
}
return arr;
}
/**
* 处理数组向右移动
* @param arr 源数组
* @param y 右移列数
* @return 移位后数组
*/
private static int[][] yidc(int[][] arr, int y) {
int[] temp = new int[5];
if (y 0) {
y = 5 + y; //输入为负时换成对应的正数行 左移2列 等于 右移3列
}
for (int k = 0; k y; k++) {
for (int i = 4; i 0; i--) {
int line = i - 1;
for (int j = 0; j 5; j++) {
temp[j] = arr[j][i];
arr[j][i] = arr[j][line];
arr[j][line] = temp[j];
}
}
}
return arr;
}
}
简测可以达到效果。
分享名称:java代码实现移位算法 java代码实现移位算法怎么用
本文地址:http://myzitong.com/article/doshcjp.html