2012-09-11 43 views
0

我一直在亂搞C與邏輯和按位表達式,並想知道這些是否正確?我只是爲x和y挑選了一些隨機數,然後走過紙上的這些位。C按位和邏輯表達式計算?

x=0xA5 and y=0x57 
Expression Value 
    x & y  0x05 
    x | y  0xF7 
~x | ~y 0xF5 
    x & !y 0x01 
    x && y 0x01 
    x || y 0x01 
~x || ~y 0x01 
    x && ~y 0x01 
+6

你不能使用編譯器來驗證嗎? – dmp

+0

我試圖做到這一點,但不知道如何。我現在要記住%#x,因爲這會非常有幫助。 – LF4

回答

4
int main (void){ 
    int x = 0xA5; 
    int y = 0x57; 

    printf("%#x\n", x & y); 
    printf("%#x\n", x | y); 
    printf("%#x\n", ~x | ~y); 
    printf("%#x\n", x & !y); 
    printf("%#x\n", x && y); 
    printf("%#x\n", x || y); 
    printf("%#x\n", ~x || ~y); 
    printf("%#x\n", x && ~y); 
    return 0; 
} 

0x5 
0xf7 
0xfffffffa 
0 
0x1 
0x1 
0x1 
0x1 

簡短的回答,不,他們並不都是正確的。爲什麼?

x = 0000 0000 1010 0101 
y = 0000 0000 0101 0111 

#3: 
~x  = 1111 1111 0101 1010 (0xFFFFFF5A) 
~y  = 1111 1111 1010 1000 (0xFFFFFFA8) 
~x | ~y = 1111 1111 1111 1010 (0xFFFFFFFA) 

#4: 
!y = 0 
x  = 0000 0000 1010 0101 
!y  = 0000 0000 0000 0000 
x & !y = 0000 0000 0000 0000 

你缺少的是!是一個邏輯不是。對任何非0值應用!給出0. ~是一個按位否定。 ~顛倒了1和0。

2

在這裏你去:http://ideone.com/Xe0ch(我是懶得去做純醇」 C,但這些操作應該產生在C++中相同的結果)在線編譯器檢查的最快方法你的工作:)