c語言 異或char型別導致高位置1
阿新 • • 發佈:2019-01-01
今天除錯程式碼遇到個問題 直接列印字串 顯示亂碼,需要轉換為可視字元,網上的資料是使用
等價為
encode('hex')
但是後續呼叫swig介面函式的過程中,對漢明距離進行計算得到的結果很奇怪,
輸出字串1:2c20f2
輸出字串2:1bc55a
統計二者漢明距離: 7
不太明白怎麼來的,將原有cpp程式略作修改在vc上執行一下發現一個現象:
for (unsigned int i = 0; i < remaining; i++) {
xa = (xa << 8) | (ap[i]);
xb = (xb << 8) | (bp[i]);
}
當
xa = (xa << 8) | (ap[i]);
等價為
(0x00002c20<<8)|0xf2
也就是xa為0x2c20,ap[i]為0x2f執行結果為
xa = 0xfffffff2
其中ap定義為
const char* ap = a.data();
可以看出ap應該是char(1byte),最後執行取或的時候,應看是將ap看做4byte進行處理的,導致結果出錯,
程式碼修改為:
xa = (xa << 8) | (0xff & ap[i]);
執行結果正常,問題首先是在ubuntu12 環境下產生的,在xp+vc6上,也存在這一問題
總結:位操作與事先定義的資料型別某些時候不相關。