1樓:
如果你把所有的運算元都用二進位制來表達就清晰了,如下位與&相同位按與來運算即可如:1
&2=0-------------
二進位制是這樣的01&
10=00位或
|一樣,按位來或即可
1|2=
3--------------
二進位制是這樣:
01|10=11
其他位運算都是按二進位制位來運算的,你轉換成2進位制就好理解了
2樓:鐵瀚楚莎莉
通常在遇到byte運算問題時要用.
例如gif
image
檔案中的"螢幕定義塊"中的第5個位元組(byte)是"packed
fields",
最高位1個bit是有無全域性調色盤標誌位.
接下來3個bit是分辯率
接下來1個bit是調色盤顏色是否安出現頻繁程度分過類的標誌位.
最低的3個bit是調色盤顏色表陣列大小.
unsigned
char
packed_fields;
intflag_g;
//標誌位的值
intsize;
//顏色表陣列大小
//計算有無全域性調色盤標誌位的值:
flag_g
=(int)
((packed_fields
&0x80)
>>7);[用按位與,取出最高位,右移七位到個位數的位置.]//如果有全域性調色盤,則
計算顏色表陣列大小,以便下一步動態分配調色盤rrggbb陣列:
if(flag_g
==1);
c語言位運算&是什麼 有什麼作用?
3樓:厲暄妍委櫻
c中的位運算可以對整形int
或字元型char
進行二進位制按位運算
&是對兩個二進位制數進行
與運算|
.....................或運算^.....................異或運算~是單目運算,對一個二進位制數取反
<<是對一個二進位制數進行左移運算
>>.....................右移運算
c語言中位運算是怎麼樣的?
4樓:隆印枝蘭凰
x<<=1
相當於乘以2;
假如x=8,對二進位制來說就是00001000,<<1就是左移一位,最低位補0,次高位捨棄(最高位是符號位,不能動)移完之後是00010000,換成十進位制就是16。相當於乘以2。<<2
就是乘以4。<<3
就是8.
>>就是除
5樓:公叔恭漫歌
先把數字轉換成二進位制的,然後從低位向高位一一對應,再就是運算了,相當於數學裡的真假與並,即1&1=1,1&0=0&1=0&0=0
6樓:毛夏止雨
就是二進位制邏輯運算。比如:
inta=1,
b=3;
a,b表示成2進位制數:a=
0000
0001b=
0000
0011a|
b=0000
0011a&
b=0000
0001
7樓:橋玉英陳妍
就是對一個x進位制數對應在記憶體中存放為二進位制形式的數碼,進行二進位制的位的操作後,得到原進位制數值。
位操作有:與&、或i、異^、左移<<、右移》。
根據這些符號所代表的操作規則來計算一個數的二進位制。
c語言位運算有什麼作用
8樓:逍遙俠
可以用位運算做檔案加密,比如一個文件,讓其中的內容位運算,再開啟就會顯示一堆亂碼,除非按特定的位運算變回來
c語言的位運算在實際操作中有什麼用
9樓:匿名使用者
位運算加速技巧
1. 如果乘上一
個2的倍數數值,可以改用左移運算(left shift) 加速 300%x = x * 2;
x = x * 64;
//改為:
x = x << 1; // 2 = 21
x = x << 6; // 64 = 262. 如果除上一個 2 的倍數數值,可以改用右移運算加速 350%x = x / 2;
x = x / 64;
//改為:x = x >> 1;// 2 = 21
x = x >> 6;// 64 = 263. 數值轉整數加速 10%x = int(1.232)
//改為:x = 1.232 >> 0;4. 交換兩個數值(swap),使用 xor 可以加速20%var t:int = a;
a = b;
b = t;
//equals:
a = a^b;
b = a^b;
a = a^b;5. 正負號轉換,可以加入 300%i = -i;
//改為
i = ~i + 1; // not 寫法
//或i = (i ^ -1) + 1; // xor 寫法
6. 取餘數,如果除數為 2 的倍數,可利用 and 運算加速 600%x = 131 % 4;
//equals:
x = 131 & (4 - 1);7. 利用 and 運算檢查整數是否為 2 的倍數,可以加速 600%iseven = (i % 2) == 0;
//equals:
iseven = (i & 1) == 0;8. 加速 math.abs 600% 的寫法1,寫法2 又比寫法1加速 20%//寫法1
i = x < 0 ? -x : x;//寫法2i = (x ^ (x >> 31)) - (x >> 31);//寫法3i=x^(~(x>>31)+1)+(x>>31);9.
比較兩數值相乘之後是否擁有相同的符號,加速 35%eqsign = a * b > 0;
//equals:
eqsign = a ^ b > 0;其它位運算技巧
1. rgb 色彩分離var 24bitcolor:uint = 0xff00cc;
var r:uint = 24bitcolor >> 16;
var g:uint = 24bitcolor >> 8 & 0xff;
var b:uint = 24bitcolor & 0xff;2. rgb 色彩合併var r:uint = 0xff;
var g:uint = 0x00;
var b:uint = 0xcc;
var 24bitcolor:uint = r << 16 | g << 8 | b;
10樓:匿名使用者
這個就要涉及計算機組成原理,也就是數字在計算機中具體如何表示了,比如9×4=36,9在計算機中用2進製表示,1001,就是這個1001連續加上4次,但是如果移位的話就僅僅移兩個位,1001向左移位變成100100就是36的二進位制碼了,比乘法要簡單得多。
11樓:匿名使用者
有用的,比如一個子程式用一個整數表示當前狀態(節約) 比如這個變數是 int flag,這個二進位制最後一位1表示有房子,0表示沒有,倒數第2位1表示男的0表示女的....然後有很多種狀態合一起..
這個時候要把一個人設成有房子,只要執行 flag |= 1, 要設定成男的只要執行flag|=1<<1;
判斷男女是否有房也直接用 flag & 1 == 1 這樣另外在一些運算密集的場景, 位運算比直接乘除法要快,比如做二分查詢經常要除以2, 執行除法多麻煩, 移位1位多容易啊
c語言中的位運算有什麼優點?
12樓:匿名使用者
很多高階的動態規劃題目或者一些基礎的運算往往需要較高的執行效率和較低的空間需求,或者需要表示一些狀態集合,而位運算剛好能滿足這一切。很多的時候,恰當的位運算使用也能使程式變得更加簡潔和優美。
C語言中位操作,C語言位操作運算子 , , , , , 是幹什麼的?
首先32位系統 3預設為整形佔4位元組 32個位 二進位制表示11111111 11111111 11111111 11111101得來方法 3的二進位制位00000000 00000000 00000000 00000011,取反補1後等到上面的值 再看下 1的二進位制11111111 11111...
學了c語言可以幹什麼,c語言的能幹什麼?
基礎程式語言,單獨用作用比較小,但軟體開發什麼的會用到,就像數學語文一樣,平時好像作用不大,但你如果不學很多事情幹不了 c語言的能幹什麼? 雲南新華電腦學校 c語言是計算機技術的基礎,是資訊科技的基礎,是自動化技術的基礎,是很多電子裝置能夠執行的基礎 學了c語言,你可以開發 1.作業系統 2.各種底...
c語言中 for迴圈巢狀的運算流程
傑青的日子 for迴圈的一般形式為 for 表示式1 表示式2 表示式3 它的執行過程如下 1 先求解表示式1。2 求解表示式2,若其值為真 非0 則執行迴圈體,否則結束迴圈。3 執行完迴圈體,再求解表示式3。4 重複執行步驟 2 和 3 直到迴圈結束。注意 表示式1僅在第一次迴圈時求解,以後都不會...