2010-06-01 92 views
2

我想:十六進制斌邏輯運算後

111 || 100 ---> 111, not 1 
100 && 100 ---> 100, not 1 
101 && 010 ---> 000, not 0 

斷碼

#include <stdio.h> 

main(void){ 
     string hexa = 0xff; 
     strig hexa2 = 0xf1; 

     // CONVERT TO INT??? cast 
     int hexa3 = hexa || hexa2; 
     int hexa4 = hexa && hexa2; 

     puts(hexa3); 
     puts(hexa4); 
} 

回答

11

你想要的位運算符(|&),而不是邏輯運算符(||&&) :

110 | 011 --> 111 
110 & 101 --> 100 

至於你的斷碼的,你也有不正確的類型hexahexb這都應該是數字類型:

int hexa = 0xff; 
int hexa2 = 0xf1; 

最後,輸出一個整數,你會用printf進行格式化:

printf("hexa3 = 0x%08x\n", heaxa3); // display as 8 digit, 0 padded hex 
+0

是的,但那些回到完整的二進制,不只是1或0. – otto 2010-06-01 22:50:22

+3

||和&&也是二元運算符。我認爲你的意思是說「比特幣」。 – sepp2k 2010-06-01 22:51:10

+0

@ sepp2k - 謝謝,我記得功能如何工作而不是他們的正確名稱要好得多 – 2010-06-01 22:53:28

1
  1. string在這裏不是正確的數據類型。數字0xff(二進制中的11111111)和字符串「0xff」之間有很大差異。我假設你想處理前者;將字符串解析爲整數是它自己的完整主題。一個16位序列的好數據類型是unsigned int
  2. ||之間有很大的區別。和|。前者做一個所謂的「邏輯」,或者:它將兩個操作數轉換爲布爾值,然後如果至少一個操作數爲真,則返回true;否則返回false。如果操作數爲0,則操作數轉換爲false,否則爲true。因此,就你的例子而言,0xff和0xf1都被轉換爲true,並且true || true == true。這就是爲什麼您的代碼打印1.

備註:即使對於布爾值,和|是不同的,因爲短路:當你有a || b時,b只在a爲假時被評估。兩個參數的評估值爲a | b。這很重要,即當兩個操作數中的一個是具有副作用的函數調用時。

+0

+1,如果我有更多的積分。 – otto 2010-06-01 23:07:04

+1

「unsigned int」? – otto 2010-06-01 23:31:05