1.左移運(yùn)算符
成都創(chuàng)新互聯(lián)公司專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站制作、做網(wǎng)站、茶陵網(wǎng)絡(luò)推廣、小程序定制開(kāi)發(fā)、茶陵網(wǎng)絡(luò)營(yíng)銷(xiāo)、茶陵企業(yè)策劃、茶陵品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(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)址:www.rwnh.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。
移位操作:
左移:向左移位,符號(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
這樣就沒(méi)問(wèn)題了。
可以自己定義一個(gè)方法,先把右移的最低位保存起來(lái)(左移就是最高位),再用移一位,再把最低位加上去,循環(huán)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,用空格分開(kāi))");
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://www.rwnh.cn/article28/doshcjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、建站公司、網(wǎng)站導(dǎo)航、自適應(yīng)網(wǎng)站、軟件開(kāi)發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)