[英]C: Ampersand in front of a number
在下面的代碼中,這一行 (x = n & 5;) 是什么意思? 據我所知,&符號用於指針。 我沒想到這段代碼會編譯,但它編譯並運行良好。 我得到的結果是
0,1,0,1,4,5,4,5,0,1,
#include <stdio.h>
int main(void){
int x, n;
for (n = 0; n < 10; n++){
x = n & 5;
printf("%d,", x);
}
printf("\n");
return 0;
}
在這種情況下,它是按位與。
x = n & 5;
will AND 5(即 0b101)與n
中的任何內容。
AND 作用於代表值的位。 如果 position 中的兩個值均為 1,則結果將為 1,否則為 0。
由於我們與 5 進行與運算,而 0b101 中的兩位只能產生 4 個值,因此 x 的唯一可能值是 1、4、5 和 0。這是一個示例:
n & 5 = x
1 (0b0001) & 0b0101 = 1 (0b0001)
2 (0b0010) & 0b0101 = 0 (0b0000)
3 (0b0011) & 0b0101 = 1 (0b0001)
4 (0b0100) & 0b0101 = 4 (0b0100)
5 (0b0101) & 0b0101 = 5 (0b0101)
6 (0b0110) & 0b0101 = 4 (0b0100)
7 (0b0111) & 0b0101 = 4 (0b0100)
8 (0b1000) & 0b0101 = 0 (0b0000)
9 (0b1001) & 0b0101 = 1 (0b0001)
那就是“按位與”運算符。 通常,它需要兩個整數,並返回一個 integer,它只設置了兩個參數中的位。
base10 base2
6 0110
3 0011
6&3 0010 (=2)
還有“按位或” |
它設置其中任何一個已設置的位。
base10 base2
6 0110
3 0011
6|3 0111 (=7)
還有“按位異或” ^
設置不同的位。
base10 base2
6 0110
3 0011
6^3 0101 (=5)
它是按位 AND 運算符。 n 的值與 5 進行“與”運算。
你已經被告知在這種情況下它是一個二進制和。 但這需要更多的解釋。 在 C 和其他類 C 語言中,有兩個&
運算符。 一個是一元的,另一個是二進制的。
一元運算符單獨作用於單個值,而二元運算符接受兩個值。 在 C 中,二元運算符優先於一元運算符。 如果你寫
int b;
int *a = &b;
那么b
是操作員可以處理的唯一值。 但是如果你寫
int c, d;
int d = c & d;
那么運算符有兩個值可以使用,二元解釋優先於一元解釋。 請注意,這不僅適用於&
運算符,還適用於它的對應物*
int *f;
int h = *f;
但是也
int i,j;
int k = i * j;
與所有運算符一樣,優先級可以用括號覆蓋:
int l, *m;
int n = l * (*m);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.