2012-09-28 48 views
2
unsigned char Mid; 

if((data[2]) == 0x9A){ 
    Mid = data[5]; 

    if((Mid == 1) || (Mid == 2) || (Mid == 3)) 
     return(Mid); 

上面的代碼得到:什麼是diffrence bettween掩蔽爲0xFF炭和鑄件(無符號字符)

警告:比較總是假由於數據類型範圍限制

如我所料,出現

錯誤。

它的確定,如果我輸入

if((unsigned char)data[2] == 0x9A){ 

if((data[2]&0xFF) == 0x9A){ 

我明白了第一個,但在第二個會發生什麼?

0xFF屏蔽效果如何?

回答

4
  • 將值轉換爲無符號字符時,您正在執行顯式類型轉換。

  • 當您用0xFF屏蔽該值時,會發生隱式類型轉換

你有符號的字符data[2]0xFF作爲操作數的按位與運算。由於其中一個操作數(0xFF)無法放入簽名字符中,因此兩個操作數都隱式轉換爲無符號類型。

+1

感謝您的明確解釋。 – roll

相關問題