日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

位運(yùn)算及其妙用

 數(shù)數(shù)數(shù)據(jù)庫(kù) 2019-07-02

程序中的所有數(shù)在計(jì)算機(jī)內(nèi)存中都是以二進(jìn)制的形式儲(chǔ)存的,即只有0和1兩種數(shù)值,位運(yùn)算就是直接對(duì)整數(shù)在內(nèi)存中的二進(jìn)制位進(jìn)行。

1 <<(向左位移)

運(yùn)算規(guī)則:a<<b,表示a轉(zhuǎn)為二進(jìn)制后左移b位,左移后,空位補(bǔ)0。

例:

3: 00000000 00000000 00000000 00000011 // 左移2位,空位補(bǔ)2個(gè)0 3<<2: 00000000 00000000 00000000 00001100

所以,3<<2 = 12

規(guī)律:a左移b位,就是a乘以2的b次方。

2 >>(向右位移)

運(yùn)算規(guī)則:a>>b,表示a轉(zhuǎn)為二進(jìn)制后右移b位,右移后,最高位是0,則空缺位補(bǔ)0;最高位是1,則空缺位補(bǔ)1。

例:

 4: 00000000 00000000 00000000 00000100 // 右移1位。右移后,最高位是0,則空缺位補(bǔ)0;最高位是1,則空缺位補(bǔ)1 4>>1 00000000 00000000 00000000 00000010

所以,4 >> 1 = 2

規(guī)律:a右移b位,就是a除以2的b次方。

3 &(與運(yùn)算)

運(yùn)算規(guī)則:相同位的兩個(gè)數(shù)字都為1,則為1;若有一個(gè)不為1,則為0。

例:

5: 00000000 00000000 00000000 00000101 6: 00000000 00000000 00000000 00000110 5&6: 00000000 00000000 00000000 00000100

所以,5&6 = 4

4 |(或運(yùn)算)

運(yùn)算規(guī)則:相同位只要有一個(gè)為1即為1。

例:

 5: 00000000 00000000 00000000 00000101 6: 00000000 00000000 00000000 00000110 5|6: 00000000 00000000 00000000 00000111 

所以,5|6 = 7

5 ^(異或運(yùn)算)

運(yùn)算規(guī)則:針對(duì)二進(jìn)制位,如果某位不同則該位為1, 否則該位為0。

例:

5: 00000000 00000000 00000000 00000101 6: 00000000 00000000 00000000 00000110 5^6: 00000000 00000000 00000000 00000011

所以,5^6 = 3

6 ~(取反運(yùn)算)

運(yùn)算規(guī)則:對(duì)二進(jìn)制各位數(shù)進(jìn)行取反,即1變成0,0變成1。

例:

 5: 00000000 00000000 00000000 00000101 ~5: 11111111 11111111 11111111 11111010 // 補(bǔ)碼形式 11111111 11111111 11111111 11111001 // 反碼 10000000 00000000 00000000 00000110 // 原碼

所以,~5 = -6

位運(yùn)算的一些妙用

  • 在不使用第三個(gè)變量的情況下,如何交換兩個(gè)變量的值?

常規(guī)操作:

void swap(int a, int b) { int temp = a; a = b; b = temp; }

騷操作:

 void swap(int a, int b) { a^=b; b^=a; a^=b; }
  • 判斷奇偶

常規(guī)操作:

if (a%2 == 0) { System.out.println('偶數(shù)'); } else { System.out.println('奇數(shù)'); }

騷操作:

	if ((a&1) == 0) {		System.out.println('偶數(shù)');	} else {		System.out.println('奇數(shù)');	}
  • 求平均數(shù)

常規(guī)操作:

int average(int x, int y) { return (x+y)/2; }

騷操作:

 int average(int x, int y) {  return (x&y)+((x^y)>>1);  } 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多