1. 程式人生 > >c語言 異或char型別導致高位置1

c語言 異或char型別導致高位置1

今天除錯程式碼遇到個問題 直接列印字串 顯示亂碼,需要轉換為可視字元,網上的資料是使用
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上,也存在這一問題

總結:位操作與事先定義的資料型別某些時候不相關。