我有一個字節數組表示爲位運算和int
char * bytes = getbytes(object); //some api function
我想檢查在一些位置x處的位是否被設置。
我一直想這個
int mask = 1 << x % 8;
y= bytes[x>>3] & mask;
然而Ÿ收益都爲零?我做錯了什麼,是否有更簡單的方法來檢查是否設置了一點?
編輯:
我也運行此。它也沒有以預期的結果返回。
int k = x >> 3;
int mask = x % 8;
unsigned char byte = bytes[k];
return (byte & mask);
它失敗了一個斷言真正的ctest我跑了。字節和掩碼此時分別從「gdb」打印「0002」和2。
編輯2:這是我如何設置位的第一位。我只是想寫一個測試來驗證它們是否已設置。
unsigned long x = somehash(void* a);
unsigned int mask = 1 << (x % 8);
unsigned int location = x >> 3;
char* filter = getData(ref);
filter[location] |= mask;
括號'()'是你的朋友。 – Yunnosch
表達對我來說很好。 'y'的類型是什麼? 'bytes'指向'char'的連續內存區域嗎? – nglee
混淆的一個可能的來源是位端。現在,您的代碼將「x = 0」解釋爲第一個字節的最低有效位。 – user3386109