java代碼實(shí)現(xiàn)移位算法 java代碼實(shí)現(xiàn)移位算法怎么用

java左移運(yùn)算符的問(wèn)題,一定給分!

1.左移運(yùn)算符

成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、茶陵網(wǎng)絡(luò)推廣、小程序定制開發(fā)、茶陵網(wǎng)絡(luò)營(yíng)銷、茶陵企業(yè)策劃、茶陵品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供茶陵建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:muchs.cn

左移運(yùn)算符用“”表示,是將運(yùn)算符左邊的對(duì)象,向左移動(dòng)運(yùn)算符右邊指定的位數(shù),并且在低位補(bǔ)零。其實(shí),向左移n 位,就相當(dāng)于乘上2 的n 次方,例如下面的例子。

public class data17

{

public static void main(String[] args)

{

int a=2;

int b=2;

System.out.println("a 移位的結(jié)果是:"+(ab));

}

}

運(yùn)行結(jié)果

a 移位的結(jié)果是:8

分析上面的程序段:

首先從本質(zhì)上來(lái)分析,2 的二進(jìn)制是00000010,它向左移動(dòng)2 位,就變成了00001000,即8。如果從另一個(gè)角度來(lái)分析,它向左移動(dòng)2 位,其實(shí)就是乘上2 的2 次方,結(jié)果還是8。

2.右移運(yùn)算符

右移運(yùn)算符用符號(hào)“”表示,是將運(yùn)算符左邊的對(duì)象向右移動(dòng)運(yùn)算符右邊指定的位數(shù),并且在高位補(bǔ)0,其實(shí)右移n 位,就相當(dāng)于除上2 的n 次方。

public class data18

{

public static void main(String[] args)

{

int a=16;

int b=2;

System.out.println("a 移位的結(jié)果是:"+(ab));

}

}

運(yùn)行結(jié)果

a 移位的結(jié)果是:4

分析上面的程序段:從本質(zhì)上來(lái)分析,16 的二進(jìn)制是00010000,它向右移動(dòng)2 位,就變成了00000100,即4。如果從另一個(gè)角度來(lái)分析,它向右移動(dòng)2 位,其實(shí)就是除以2 的2 次方,結(jié)果還是4。

3.帶符號(hào)的右移運(yùn)算符

帶符號(hào)的右移運(yùn)算符用符號(hào)“”表示,是將運(yùn)算符左邊的運(yùn)算對(duì)象,向右移動(dòng)運(yùn)算符右邊指定的位數(shù)。如果是正數(shù),在高位補(bǔ)零,如果是負(fù)數(shù),則在高位補(bǔ)1,先看下面一個(gè)簡(jiǎn)單的例子。

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 的移位結(jié)果:"+(ab));

System.out.println("c 的移位結(jié)果:"+(cd));

}

}

運(yùn)行結(jié)果

a 的移位結(jié)果:4

c 的移位結(jié)果:-4

分析上面的程序段:

a 的值是16,轉(zhuǎn)換成二進(jìn)制是00010000,讓它右移兩位成00000100 即4。

c 的值是-16,轉(zhuǎn)換成二進(jìn)制是11101111,讓它右移一位成11111011 即-4。

java位移問(wèn)題

移位操作:

左移:向左移位,符號(hào)后面的數(shù)字是移了多少位,移的位用0補(bǔ)齊,例如2進(jìn)制數(shù)01111111左移一位后變?yōu)?1111110,移位是字節(jié)操作。

右移:向右移位,符號(hào)后面的數(shù)字是移了多少位,移的位用符號(hào)位補(bǔ)齊,例如01111111右移一位后變?yōu)?0111111,而10000000右移一位后變成11000000,因?yàn)榉?hào)位是1。

你的例題num用2進(jìn)制表示為1111 1111 1111 1111 1111 1111 1110,向左移了4次位就變成1111 1111 1111 1111 1111 1110 0000。十分簡(jiǎn)單

獎(jiǎng)勵(lì)就不用了。

0x代表16進(jìn)制,0xFFFFFFE就是一個(gè)十六進(jìn)制的數(shù),化成2進(jìn)制的數(shù)就是:

1111 1111 1111 1111 1111 1111 1110,這個(gè)數(shù)太大了,化成十進(jìn)制就是:16的7次方減2。

移位都是在2進(jìn)制下做的操作,硬件的實(shí)現(xiàn)也很簡(jiǎn)單,向左移其實(shí)就是把每一個(gè)2進(jìn)制位都向左移1位,這樣不就像10進(jìn)制的數(shù)乘了個(gè)十么。比如11左移一位就是110,但是本來(lái)存這個(gè)數(shù)的內(nèi)存只有兩位,現(xiàn)在多了一位,那就舍唄,于是就變成10了。你這個(gè)數(shù)大,但是道理是一樣的。

右移稍復(fù)雜點(diǎn),還舉個(gè)簡(jiǎn)單的例子,11向右移一位,11還可以看成啥呢,就是011.0,于是右移一位就是,01.10,舍掉小數(shù)不就是01了。但是這是錯(cuò)的,就是符號(hào)位的問(wèn)題,計(jì)算機(jī)死規(guī)定最高位是符號(hào)位,也又做了一個(gè)死規(guī)定,就是11不能看成011.0,11前面的位必須看成和符號(hào)位一樣的數(shù),也就是看成111.0,那右移一位不就是11.10,舍去小數(shù)就變成11了,如果是01,就看成001.0,右移一位就變成00.10,于是就是00。關(guān)鍵是符號(hào)位,也就是最高位,最高位是1,右移就把最高位補(bǔ)1,如果最高位是0,右移就把最高位補(bǔ)0。死規(guī)定,就得記。

右移就是這點(diǎn)麻煩,左移挺簡(jiǎn)單。

你這個(gè)數(shù)最高位是1,所以右移就補(bǔ)1,但是你給的例子是左移的(箭頭指的方向),所以不用想那么多,移了4位就是這么個(gè)樣子,不用再多說(shuō)了吧,應(yīng)該理解了,要還不懂就說(shuō)哪不懂。

抱歉哦,馬虎了,int型變量是4字節(jié),所以0xffffffe由于不到4字節(jié),所以前面用0補(bǔ)齊,也就是0x0ffffffe,這是4個(gè)字節(jié).

左移1位一次:0x1fffffffc

左移1位兩次:0x3fffffff8

左移1位三次:0x7fffffff0

左移1位四次:0xfffffffe0

這樣就沒問(wèn)題了。

java中如何實(shí)現(xiàn)移位循環(huán)?

可以自己定義一個(gè)方法,先把右移的最低位保存起來(lái)(左移就是最高位),再用移一位,再把最低位加上去,循環(huán)n次

java循環(huán)矩陣移位

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("請(qǐng)輸入兩個(gè)位移量(注:不能超過(guò)5或者-5,用空格分開)");

String?readline?=?sc.nextLine();

String[]?numbers?=?readline.split("?");

if(numbers.length??2){

System.out.println("警告!輸入有誤:少于兩個(gè)數(shù)!");

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("警告!輸入有誤:數(shù)值須在(-5?,5)內(nèi),不包括-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();

}

}

/**

?*?處理數(shù)組下沉

?*?@param?arr?源數(shù)組

?*?@param?x?下沉行數(shù)

?*?@return?下沉后的數(shù)組

?*/

private?static?int[][]?xidc(int[][]?arr,?int?x)?{

int[]?temp?=?new?int[5];

if?(x??0)?{

x?=?5?+?x;?//輸入為負(fù)時(shí)換成對(duì)應(yīng)的正數(shù)行??上浮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;

}

/**

?*?處理數(shù)組向右移動(dòng)

?*?@param?arr?源數(shù)組

?*?@param?y?右移列數(shù)

?*?@return?移位后數(shù)組

?*/

private?static?int[][]?yidc(int[][]?arr,?int?y)?{

int[]?temp?=?new?int[5];

if?(y??0)?{

y?=?5?+?y;??//輸入為負(fù)時(shí)換成對(duì)應(yīng)的正數(shù)行??左移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;

}

}

簡(jiǎn)測(cè)可以達(dá)到效果。

網(wǎng)頁(yè)標(biāo)題:java代碼實(shí)現(xiàn)移位算法 java代碼實(shí)現(xiàn)移位算法怎么用
地址分享:http://muchs.cn/article28/doshcjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、營(yíng)銷型網(wǎng)站建設(shè)、建站公司、網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開發(fā)