簡體   English   中英

C:數字前面的符號

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM