java中的位運算子及其用法。
你所需要的網(wǎng)站建設(shè)服務(wù),我們均能行業(yè)靠前的水平為你提供.標(biāo)準(zhǔn)是產(chǎn)品質(zhì)量的保證,主要從事成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站建設(shè)、手機網(wǎng)站制作設(shè)計、網(wǎng)頁設(shè)計、品牌網(wǎng)站制作、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。創(chuàng)新互聯(lián)公司擁有實力堅強的技術(shù)研發(fā)團隊及素養(yǎng)的視覺設(shè)計專才。
位邏輯運算子有“與”(AND)、“或”(OR)、“異或(XOR)”、“非(NOT)”,分別用“”、“|”、“^”、“~”表示。
下面的例子說明了位邏輯運算子:
Demonstrate the biise logical operators.
class BitLogic {
public static void main(String args[]) {
String binary[] = {
"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111",
"1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"
};
int a = 3; 0 + 2 + 1 or 0011 in binary
int b = 6; 4 + 2 + 0 or 0110 in binary
int c = a | b;
int d = a b;
int e = a ^ b;
int f = (~a b) | (a ~b);
int g = ~a 0x0f;
System.out.println(" a = " + binary[a]);
System.out.println(" b = " + binary[b]);
System.out.println(" a|b = " + binary[c]);
System.out.println(" ab = " + binary[d]);
System.out.println(" a^b = " + binary[e]);
System.out.println("~ab|a~b = " + binary[f]);
System.out.println(" ~a = " + binary[g]);
}
}
在本例中,變數(shù)a與b對應(yīng)位的組合代表了二進(jìn)位制數(shù)所有的 4 種組合模式:0-0,0-1,1-0,和1-1?!皘”運算子和“”運算子分別對變數(shù)a與b各個對應(yīng)位的運算得到了變數(shù)c和變數(shù)d的值。對變數(shù)e和f的賦值說明了“^”運算子的功能。字串陣列binary代表了0到15對應(yīng)的二進(jìn)位制的值。在本例中,陣列各元素的排列順序顯示了變數(shù)對應(yīng)值的二進(jìn)位制程式碼。陣列之所以這樣構(gòu)造是因為變數(shù)的值n對應(yīng)的二進(jìn)位制程式碼可以被正確的儲存在陣列對應(yīng)元素binary[n]中。例如變數(shù)a的值為3,則它的二進(jìn)位制程式碼對應(yīng)地儲存在陣列元素binary[3]中。~a的值與數(shù)字0x0f (對應(yīng)二進(jìn)位制為0000 1111)進(jìn)行按位與運算的目的是減小~a的值,保證變數(shù)g的結(jié)果小于16。因此該程式的執(zhí)行結(jié)果可以用陣列binary對應(yīng)的元素來表示。該程式的輸出如下:
a = 0011
b = 0110
a|b = 0111
ab = 0010
a^b = 0101
~ab|a~b = 0101
~a = 1100
左移運算子
左移運算子使指定值的所有位都左移規(guī)定的次數(shù)。它的通用格式如下所示:
value num
這里,num指定要移位值value移動的位數(shù)。也就是,左移運算子使指定值的所有位都左移num位。每左移一個位,高階位都被移出(并且丟棄),并用0填充右邊。這意味著當(dāng)左移的運算數(shù)是int型別時,每移動1位它的第31位就要被移出并且丟棄;當(dāng)左移的運算數(shù)是long型別時,每移動1位它的第63位就要被移出并且丟棄。
在對byte和short型別的值進(jìn)行移位運算時,你必須小心。因為你知道Java在對表達(dá)式求值時,將自動把這些型別擴大為 int型,而且,表示式的值也是int型 。對byte和short型別的值進(jìn)行移位運算的結(jié)果是int型,而且如果左移不超過31位,原來對應(yīng)各位的值也不會丟棄。但是,如果你對一個負(fù)的byte或者short型別的值進(jìn)行移位運算,它被擴大為int型后,它的符號也被擴充套件。這樣,整數(shù)值結(jié)果的高位就會被1填充。因此,為了得到正確的結(jié)果,你就要舍棄得到結(jié)果的高位。這樣做的最簡單辦法是將結(jié)果轉(zhuǎn)換為byte型。下面的程式說明了這一點:
Left shifting a byte value.
class ByteShift {
public static void main(String args[]) {
byte a = 64, b;
int i;
i = a 2;
b = (byte) (a 2);
System.out.println("Original value of a: " + a);
System.out.println("i and b: " + i + " " + b);
}
}
該程式產(chǎn)生的輸出下所示:
Original value of a: 64
i and b: 256 0
因變數(shù)a在賦值表示式中,故被擴大為int型,64(0100 0000)被左移兩次生成值256(10000 0000)被賦給變數(shù)i。然而,經(jīng)過左移后,變數(shù)b中惟一的1被移出,低位全部成了0,因此b的值也變成了0。
既然每次左移都可以使原來的運算元翻倍,程式設(shè)計師們經(jīng)常使用這個辦法來進(jìn)行快速的2的乘法。但是你要小心,如果你將1移進(jìn)高階位(31或63位),那么該值將變?yōu)樨?fù)值。下面的程式說明了這一點:
Left shifting as a quick way to multiply by 2.
class MultByTwo {
public static void main(String args[]) {
int i;
int num = 0xFFFFFFE;
for(i=0; i4; i++) {
num = num 1;
System.out.println(num);
}
}
}
該程式的輸出如下所示:
536870908
1073741816
2147483632
-32
初值經(jīng)過仔細(xì)選擇,以便在左移 4 位后,它會產(chǎn)生-32。正如你看到的,當(dāng)1被移進(jìn)31位時,數(shù)字被解釋為負(fù)值。
右移運算子
右移運算子使指定值的所有位都右移規(guī)定的次數(shù)。它的通用格式如下所示:
value num
這里,num指定要移位值value移動的位數(shù)。也就是,右移運算子使指定值的所有位都右移num位。
下面的程式片段將值32右移2次,將結(jié)果8賦給變數(shù)a:
int a = 32;
a = a 2; a now contains 8
當(dāng)值中的某些位被“移出”時,這些位的值將丟棄。例如,下面的程式片段將35右移2次,它的2個低位被移出丟棄,也將結(jié)果8賦給變數(shù)a:
int a = 35;
a = a 2; a still contains 8
用二進(jìn)位制表示該過程可以更清楚地看到程式的執(zhí)行過程:
00100011 35
2
00001000 8
將值每右移一次,就相當(dāng)于將該值除以2并且舍棄了余數(shù)。你可以利用這個特點將一個整數(shù)進(jìn)行快速的2的除法。當(dāng)然,你一定要確保你不會將該數(shù)原有的任何一位移出。
右移時,被移走的最高位(最左邊的位)由原來最高位的數(shù)字補充。例如,如果要移走的值為負(fù)數(shù),每一次右移都在左邊補1,如果要移走的值為正數(shù),每一次右移都在左邊補0,這叫做符號位擴充套件(保留符號位)(sign extension),在進(jìn)行右移操作時用來保持負(fù)數(shù)的符號。例如,–8 1 是–4,用二進(jìn)位制表示如下:
11111000 –8
1
11111100 –4
一個要注意的有趣問題是,由于符號位擴充套件(保留符號位)每次都會在高位補1,因此-1右移的結(jié)果總是–1。有時你不希望在右移時保留符號。例如,下面的例子將一個byte型的值轉(zhuǎn)換為用十六進(jìn)位制表示。注意右移后的值與0x0f進(jìn)行按位與運算,這樣可以舍棄任何的符號位擴充套件,以便得到的值可以作為定義陣列的下標(biāo),從而得到對應(yīng)陣列元素代表的十六進(jìn)位制字元。
Masking sign extension.
class HexByte {
static public void main(String args[]) {
char hex[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f''
};
byte b = (byte) 0xf1;
System.out.println("b = 0x" + hex[(b 4) 0x0f] + hex[b 0x0f]);
}
}
該程式的輸出如下:
b = 0xf1
無符號右移
正如上面剛剛看到的,每一次右移,運算子總是自動地用它的先前最高位的內(nèi)容補它的最高位。這樣做保留了原值的符號。但有時這并不是我們想要的。例如,如果你進(jìn)行移位操作的運算數(shù)不是數(shù)字值,你就不希望進(jìn)行符號位擴充套件(保留符號位)。當(dāng)你處理畫素值或圖形時,這種情況是相當(dāng)普遍的。在這種情況下,不管運算數(shù)的初值是什么,你希望移位后總是在高位(最左邊)補0。這就是人們所說的無符號移動(unsigned shift)。這時你可以使用Java的無符號右移運算子,它總是在左邊補0。下面的程式段說明了無符號右移運算子。在本例中,變數(shù)a被賦值為-1,用二進(jìn)位制表示就是32位全是1。這個值然后被無符號右移24位,當(dāng)然它忽略了符號位擴充套件,在它的左邊總是補0。這樣得到的值255被賦給變數(shù)a。
int a = -1;
a = a 24;
下面用二進(jìn)位制形式進(jìn)一步說明該操作:
11111111 11111111 11111111 11111111 int型- 1的二進(jìn)位制程式碼
24 無符號右移24位
00000000 00000000 00000000 11111111 int型255的二進(jìn)位制程式碼由于無符號右移運算子只是對32位和64位的值有意義,所以它并不像你想象的那樣有用。因為你要記住,在表示式中過小的值總是被自動擴大為int型。這意味著符號位擴充套件和移動總是發(fā)生在32位而不是8位或16位。這樣,對第7位以0開始的byte型的值進(jìn)行無符號移動是不可能的,因為在實際移動運算時,是對擴大后的32位值進(jìn)行操作。下面的例子說明了這一點:
Unsigned shifting a byte value.
class ByteUShift {
static public void main(String args[]) {
char hex[] = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
byte b = (byte) 0xf1;
byte c = (byte) (b 4);
byte d = (byte) (b 4);
byte e = (byte) ((b 0xff) 4);
System.out.println(" b = 0x"
+ hex[(b 4) 0x0f] + hex[b 0x0f]);
System.out.println(" b 4 = 0x"
+ hex[(c 4) 0x0f] + hex[c 0x0f]);
System.out.println(" b 4 = 0x"
+ hex[(d 4) 0x0f] + hex[d 0x0f]);
System.out.println("( b 0xff) 4 = 0x"
+ hex[(e 4) 0x0f] + hex[e 0x0f]);
}
}
該程式的輸出顯示了無符號右移運算子對byte型值處理時,實際上不是對byte型值直接操作,而是將其擴大到int型后再處理。在本例中變數(shù)b被賦為任意的負(fù)byte型值。對變數(shù)b右移4位后轉(zhuǎn)換為byte型,將得到的值賦給變數(shù)c,因為有符號位擴充套件,所以該值為0xff。對變數(shù)b進(jìn)行無符號右移4位操作后轉(zhuǎn)換為byte型,將得到的值賦給變數(shù)d,你可能期望該值是0x0f,但實際上它是0xff,因為在移動之前變數(shù)b就被擴充套件為int型,已經(jīng)有符號擴充套件位。最后一個表示式將變數(shù)b的值通過按位與運算將其變?yōu)?位,然后右移4位,然后將得到的值賦給變數(shù)e,這次得到了預(yù)想的結(jié)果0x0f。由于對變數(shù)d(它的值已經(jīng)是0xff)進(jìn)行按位與運算后的符號位的狀態(tài)已經(jīng)明了,所以注意,對變數(shù)d再沒有進(jìn)行無符號右移運算。
B = 0xf1
b 4 = 0xff
b 4 = 0xff
(b 0xff) 4 = 0x0f
位運算子賦值
所有的二進(jìn)位制位運算子都有一種將賦值與位運算組合在一起的簡寫形式。例如,下面兩個語句都是將變數(shù)a右移4位后賦給a:
a = a 4;
a = 4;
同樣,下面兩個語句都是將表示式a OR b運算后的結(jié)果賦給a:
a = a | b;
a |= b;
下面的程式定義了幾個int型變數(shù),然后運用位賦值簡寫的形式將運算后的值賦給相應(yīng)的變數(shù):
class OpBitEquals {
public static void main(String args[]) {
int a = 1;
int b = 2;
int c = 3;
a |= 4;
b = 1;
c = 1;
a ^= c;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
該程式的輸出如下所示:
a = 3
b = 1
c = 6
java中的按位運算子
與
00 =0
10 =0
01 =0
11 =1
或
0||0 =0
1||0 =1
0||1 =1
1||1 =1
異或是
1^0=1
0^1=1
0^0=0
1^1=0
例子
11001010 與
00011011
按位與 按位或 按位異或
00001010 11011011 11010001
什么是Java的位運算子?
位運算子用來對二進(jìn)位制位進(jìn)行操作,位 運 算 符 (>>,<<,>>>,,|,^,~ ) ,位運 算 符 中 ,除 ~ 以 外 ,其余 均 為 二 元 運 算 符 。 操 作 數(shù) 只 能 為 整 型 和字 符 型 數(shù) 據(jù) 。
比如‘’ 這個就相當(dāng)于乘以2.
c++中的位運算子號
C++位運算子有以下兩類:
1 位邏輯運算子:(位“與”)、^(位“異或”)、|(位“或”)和~(位“取反”)
2 移位運算子:(左移)和(右移).
位“與”、位“或”和位“異或”運算子都是雙目運算子,其結(jié)合性都是從左向右的,優(yōu)先順序高于邏輯運算子,低于比較運算子,且從高到低依次為、^、|
c++中按位運算子的用法
這個是C++中的基礎(chǔ),你可以看看人家的部落格。
:m.blog.csdn./article/details?id=52196039
java中位運算子詳解
運算子那多了去了
算術(shù)運算子 + - * / % 分別是加減乘除求余
在這里要特別注意有個晉升現(xiàn)象.是指低于int的三種類型(byte short char)進(jìn)行算術(shù)運算后會自動提升成int型別列如
byte a=20;
byte b=30;
byte c=a+b;這就錯了應(yīng)該寫成byte c=(byte)(a+b);或者 int c =a+b;
比較運算子
即 , ,=, = ,==, !=分別是小于, 大于, 小于等于,大于等于,不等于
它的結(jié)果是一個Boolean 型別
邏輯運算子
或(||) 與() 非(!) or and not
賦值運算子
最簡單的是"="用來為常量或者變數(shù)指定值注意不能為運算式賦值
還有其他賦值運算子如下
+= 加等 把變數(shù)加上右側(cè)的值然后再賦值給自身
-= 減等 把變數(shù)減去右側(cè)的值然后再賦值給自身
*= 乘等 把變數(shù)乘以右側(cè)的值然后再賦值給自身
/= 除等 把變數(shù)除以右側(cè)的值然后再賦值給自身
%= 取余等 把變數(shù)和右側(cè)的值取余然后再賦值給自身
還有二進(jìn)位制運算子
位運算子
移位運算子....
++ 遞增
-- 遞減
條件?值1:值2 條件運算子
java中的邏輯符號,運算子(位運算子)個代表什么
算數(shù)運算子,+-*/(+=,-=,*=,、/*) p.s. 1/0 = NaN 無窮大。邏輯運算子,略轉(zhuǎn)義序列符(例舉),\b 退格, \t 制表, \n 換行(制圖、一般println), \r 回車, \" 雙引號, \' 單引號p.s. 取決于os,并不常用。遞增/減 ++, --賦值 =比較 =,=, ==位移 ,, p.s. 圖形用到注釋, 行注釋,/* */段注釋型別轉(zhuǎn)換, a = (int)b; 括號。條件, if()... == a ? true : false 三目運算。正則表示式, 應(yīng)用類,用到這再說。
LZ是學(xué)Java的新手吧。嗯,慢慢學(xué)
java都有哪些運算子及其用法
Java的運算子可分為4類:算術(shù)運算子、關(guān)系運算符、邏輯運算子和位運算子。
1.算術(shù)運算子
Java的算術(shù)運算子分為一元運算子和二元運算子。一元運算子只有一個運算元;二元運算子有兩個運算元,運算子位于兩個運算元之間。算術(shù)運算子的運算元必須是數(shù)值型別。
(1)一元運算子:
一元運算子有:正(+)、負(fù)(-)、加1(++)和減1(--)4個。
加1、減1運算子只允許用于數(shù)值型別的變數(shù),不允許用于表示式中。加1、減1運算子既可放在變數(shù)之前(如++i),也可放在變數(shù)之后(如i++),兩者的差別是:如果放在變數(shù)之前(如++i),則變數(shù)值先加1或減1,然后進(jìn)行其他相應(yīng)的操作(主要是賦值操作);如果放在變數(shù)之后(如i++),則先進(jìn)行其他相應(yīng)的操作,然后再進(jìn)行變數(shù)值加1或減1。
例如:
int i=6,j,k,m,n;
j = +i; 取原值,即j=6
k = -i; 取負(fù)值,即k=-6
m = i++; 先m=i,再i=i+1,即m=6,i=7
m = ++i; 先i=i+1,再m=i,即i=7,m=7
n = j--; 先n=j,再j=j-1,即n=6,j=5
n = --j; 先j=j-1,再n=j,即j=5,n=5
在書寫時還要注意的是:一元運算子與其前后的運算元之間不允許有空格,否則編譯時會出錯。
(2)二元運算子
二元運算子有:加(+)、減(-)、乘(*)、除(/)、取余(%)。其中+、-、*、/完成加、減、乘、除四則運算,%是求兩個運算元相除后的余數(shù)。
%求余操作舉例:
a % b = a - (a / b) * b
取余運算子既可用于兩個運算元都是整數(shù)的情況,也可用于兩個運算元都是浮點數(shù)(或一個運算元是浮點數(shù))的情況。當(dāng)兩個運算元都是浮點數(shù)時,例如7.6 % 2.9時,計算結(jié)果為:7.6 - 2 * 2.9 = 1.8。
當(dāng)兩個運算元都是int型別數(shù)時,a%b的計算公式為:
a % b = a - (int)(a / b) * b
當(dāng)兩個運算元都是long型別(或其他整數(shù)型別)數(shù)時,a%b的計算公式可以類推。
當(dāng)參加二元運算的兩個運算元的資料型別不同時,所得結(jié)果的資料型別與精度較高(或位數(shù)更長)的那種資料型別一致。
例如:
7 / 3 整除,運算結(jié)果為2
7.0 / 3 除法,運算結(jié)果為2.33333,即結(jié)果與精度較高的型別一致
7 % 3 取余,運算結(jié)果為1
7.0 % 3 取余,運算結(jié)果為1.0
-7 % 3 取余,運算結(jié)果為-1,即運算結(jié)果的符號與左運算元相同
7 % -3 取余,運算結(jié)果為1,即運算結(jié)果的符號與左運算元相同
2.關(guān)系運算符
關(guān)系運算符用于比較兩個數(shù)值之間的大小,其運算結(jié)果為一個邏輯型別的數(shù)值。關(guān)系運算符有六個:等于(==)、不等于(!=)、大于()、大于等于(=)、小于()、小于等于(=)。
例如:
9 = 8 運算結(jié)果為false
9.9 = 8.8 運算結(jié)果為true
'A' 'a' 運算結(jié)果為true,因字元'A'的Unicode編碼值小于字元'a'的
要說明的是,對于大于等于(或小于等于)關(guān)系運算符來說,只有大于和等于兩種關(guān)系運算都不成立時其結(jié)果值才為false,只要有一種(大于或等于)關(guān)系運算成立其結(jié)果值即為true。例如,對于9 = 8,9既不小于8也不等于8,所以9 = 8 的運算結(jié)果為false。對于9 = 9,因9等于9,所以9 = 9的運算結(jié)果為true。
3.邏輯運算子
邏輯運算子要求運算元的資料型別為邏輯型,其運算結(jié)果也是邏輯型值。邏輯運算子有:邏輯與()、邏輯或(||)、邏輯非(!)、邏輯異或(^)、邏輯與()、邏輯或(|)。
真值表是表示邏輯運算功能的一種直觀方法,其具體方法是把邏輯運算的所有可能值用表格形式全部羅列出來。Java語言邏輯運算子的真值表如下:
邏輯運算子的真值表
A B AB A||B !A A^B AB A|B
false false false false true false false false
true false false true false true false true
false true false true true true false true
true true true true false false true true
前兩列是參與邏輯運算的兩個邏輯變數(shù),共有4種可能,所以表2.5共有4行。后6列分別是6個邏輯運算子在邏輯變數(shù)A和邏輯變數(shù)B取不同數(shù)值時的運算結(jié)果值。
要說明的是,兩種邏輯與(和)的運算規(guī)則基本相同,兩種邏輯或(||和|)的運算規(guī)則也基本相同。其區(qū)別是:和|運算是把邏輯表示式全部計算完,而和||運算具有短路計算功能。所謂短路計算,是指系統(tǒng)從左至右進(jìn)行邏輯表示式的計算,一旦出現(xiàn)計算結(jié)果已經(jīng)確定的情況,則計算過程即被終止。對于運算來說,只要運算子左端的值為false,則因無論運算子右端的值為true或為false,其最終結(jié)果都為false。所以,系統(tǒng)一旦判斷出運算子左端的值為false,則系統(tǒng)將終止其后的計算過程;對于 || 運算來說,只要運算子左端的值為true,則因無論運算子右端的值為true或為false,其最終結(jié)果都為true。所以,系統(tǒng)一旦判斷出|| 運算子左端的值為true,則系統(tǒng)將終止其后的計算過程。
例如,有如下邏輯表示式:
(i=1) (i=100)
此時,若i等于0,則系統(tǒng)判斷出i=1的計算結(jié)果為false后,系統(tǒng)馬上得出該邏輯表示式的最終計算結(jié)果為false,因此,系統(tǒng)不繼續(xù)判斷i=100的值。短路計算功能可以提高程式的執(zhí)行速度。
作者建議讀者:在程式設(shè)計時使用和||運算子,不使用和|運算子。
用邏輯與()、邏輯或(||)和邏輯非(!)可以組合出各種可能的邏輯表示式。邏輯表示式主要用在 if、while等語句的條件組合上。
例如:
int i = 1;
while(i=1) (i=100) i++; 回圈過程
上述程式段的回圈過程將i++語句回圈執(zhí)行100次。
4.位運算子
位運算是以二進(jìn)位制位為單位進(jìn)行的運算,其運算元和運算結(jié)果都是整型值。
位運算子共有7個,分別是:位與()、位或(|)、位非(~)、位異或(^)、右移()、左移()、0填充的右移()。
位運算的位與()、位或(|)、位非(~)、位異或(^)與邏輯運算的相應(yīng)操作的真值表完全相同,其差別只是位運算操作的運算元和運算結(jié)果都是二進(jìn)位制整數(shù),而邏輯運算相應(yīng)操作的運算元和運算結(jié)果都是邏輯值。
位運算示例
運算子 名稱 示例 說明
位與 xy 把x和y按位求與
| 位或 x|y 把x和y按位求或
~ 位非 ~x 把x按位求非
^ 位異或 x^y 把x和y按位求異或
右移 xy 把x的各位右移y位
左移 xy 把x的各位左移y位
右移 xy 把x的各位右移y位,左邊填0
舉例說明:
(1)有如下程式段:
int x = 64; x等于二進(jìn)位制數(shù)的01000000
int y = 70; y等于二進(jìn)位制數(shù)的01000110
int z = xy z等于二進(jìn)位制數(shù)的01000000
即運算結(jié)果為z等于二進(jìn)位制數(shù)01000000。位或、位非、位異或的運算方法類同。
(2)右移是將一個二進(jìn)位制數(shù)按指定移動的位數(shù)向右移位,移掉的被丟棄,左邊移進(jìn)的部分或者補0(當(dāng)該數(shù)為正時),或者補1(當(dāng)該數(shù)為負(fù)時)。這是因為整數(shù)在機器內(nèi)部采用補碼表示法,正數(shù)的符號位為0,負(fù)數(shù)的符號位為1。例如,對于如下程式段:
int x = 70; x等于二進(jìn)位制數(shù)的01000110
int y = 2;
int z = xy z等于二進(jìn)位制數(shù)的00010001
即運算結(jié)果為z等于二進(jìn)位制數(shù)00010001,即z等于十進(jìn)位制數(shù)17。
對于如下程式段:
int x = -70; x等于二進(jìn)位制數(shù)的11000110
int y = 2;
int z = xy z等于二進(jìn)位制數(shù)的11101110
即運算結(jié)果為z等于二進(jìn)位制數(shù)11101110,即z等于十進(jìn)位制數(shù)-18。要透徹理解右移和左移操作,讀者需要掌握整數(shù)機器數(shù)的補碼表示法。
(3)0填充的右移()是不論被移動數(shù)是正數(shù)還是負(fù)數(shù),左邊移進(jìn)的部分一律補0。
5.其他運算子
(1)賦值運算子與其他運算子的簡捷使用方式
賦值運算子可以與二元算術(shù)運算子、邏輯運算子和位運算子組合成簡捷運算子,從而可以簡化一些常用表示式的書寫。
賦值運算子與其他運算子的簡捷使用方式
運算子 用法 等價于 說明
+= s+=i s=s+i s,i是數(shù)值型
-= s-=i s=s-i s,i是數(shù)值型
*= s*=i s=s*i s,i是數(shù)值型
/= s/=i s=s/i s,i是數(shù)值型
%= s%=i s=s%i s,i是數(shù)值型
= a=b a=ab a,b是邏輯型或整型
|= a|=b a=a|b a,b是邏輯型或整型
^= A^=b a=a^b a,b是邏輯型或整型
= s=i s=si s,i是整型
= s=i s=si s,i是整型
= s=i s=si s,i是整型
(2)方括號[]和圓括號()運算子
方括號[]是陣列運算子,方括號[]中的數(shù)值是陣列的下標(biāo),整個表示式就代表陣列中該下標(biāo)所在位置的元素值。
圓括號()運算子用于改變表示式中運算子的優(yōu)先順序。
(3)字串加(+)運算子
當(dāng)運算元是字串時,加(+)運算子用來合并兩個字串;當(dāng)加(+)運算子的一邊是字串,另一邊是數(shù)值時,機器將自動將數(shù)值轉(zhuǎn)換為字串,這種情況在輸出語句中很常見。如對于如下程式段:
int max = 100;
System.out.println("max = "+max);
計算機螢?zāi)坏妮敵鼋Y(jié)果為:max = 100,即此時是把變數(shù)max中的整數(shù)值100轉(zhuǎn)換成字串100輸出的。
(4)條件運算子(?:)
條件運算子(?:)的語法形式為:
表示式1 ?表示式2 : 表示式3
條件運算子的運算方法是:先計算表示式1的值,當(dāng)表示式1的值為true時,則將表示式2的值作為整個表示式的值;當(dāng)表示式1的值為false時,則將表示式3的值作為整個表示式的值。如:
int a=1,b=2,max;
max = ab?a:b; max等于2
(5)強制型別轉(zhuǎn)換符
強制型別轉(zhuǎn)換符能將一個表示式的型別強制轉(zhuǎn)換為某一指定資料型別,其語法形式為:
(型別)表示式
(6)物件運算子instanceof
物件運算子instanceof用來測試一個指定物件是否是指定類(或它的子類)的例項,若是則返回true,否則返回false。
(7)點運算子
點運算子“.”的功能有兩個:一是引用類中成員,二是指示包的層次等級。
6.運算子的優(yōu)先順序
以下按優(yōu)先順序從高到低的次序列出Java語言中的所有運算子,表中結(jié)合性一列中的“左?右”表示其運算次序為從左向右,“右?左”表示其運算次序為從右向左。
優(yōu)先順序 運算子 結(jié)合性
1 . [] () ; ,
2 ++ ―― += ! ~ +(一元) -(一元) 右?左
3 * / % 左?右
4 +(二元) -(二元) 左?右
5 左?右
6 = = instanceof 左?右
7 = = != 左?右
8 左?右
9 ^ 左?右
10 | 左?右
11 左?右
12 || 左?右
13 ?: 右?左
14 = *= /= %= += -= = = = = ^= |= 右?左
--感謝原作者。
如何理解vba中邏輯運算子的位運算子
位運算子并不是邏輯運算子,邏輯運算子包括或、與、非、異或。
在這個過程中,先把15和14轉(zhuǎn)化成二進(jìn)制的,然后在進(jìn)行或運算,1111,然后在進(jìn)行二進(jìn)制轉(zhuǎn)換,所以說結(jié)果為13
順便給您推薦一下當(dāng)時學(xué)習(xí)Java看的視頻教程——如鵬網(wǎng)的這樣學(xué)Java不枯燥
通過開發(fā)一些小游戲來講解Java,像飛機大戰(zhàn),超級瑪麗,湯姆貓等等,挺有意思的
你的這個設(shè)計有問題。
位運算來進(jìn)行邏輯判斷,其實就是用數(shù)字的二進(jìn)制各位來做標(biāo)志。通過位運算,進(jìn)行權(quán)限的組合和拆分。
這樣有個基礎(chǔ):就是每個權(quán)限的值正好要是二進(jìn)制位的對應(yīng)值。
權(quán)限可以取的數(shù)就是二進(jìn)制的進(jìn)度值。如:1,2,4,8,16,32……(不超過數(shù)字表達(dá)范圍)。
看你的題目: 3是發(fā)帖,4是刪帖。要用二進(jìn)制來做掩碼計算。設(shè)計不科學(xué)。
兩個方法:
1 建議使用1,2,4,8……來定義的你的權(quán)限。
如果改成:4是發(fā)帖,8是刪帖
long power=4|8;
判斷是否有發(fā)帖權(quán)限:power4 0
2 如果一定要用1,2,3,4來定義,那么要做進(jìn)制操作。
long power=(1(3-1))|(1(4-1));
判斷是否有發(fā)帖權(quán)限:(power(1(3-1))) 0
注:如果上面都不減去1,也行,就浪費一個位置。
6=0000 0110
2=0000 0010
按位與,就是將這兩個數(shù)字對應(yīng)的位逐一進(jìn)行與運算。
結(jié)果得0000 0010=2。
本文名稱:java代碼按位計算 java的位數(shù)怎么看
分享路徑:http://chinadenli.net/article40/ddeepeo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗、網(wǎng)站改版、Google、建站公司、靜態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)