我想使用unsigned char
作爲字節。我期望它的範圍從0
到255
。Usigned char超過255
我定義了下面的宏:
#define ROTATE_LEFT(BYTE) ((BYTE & 128) > 0) ? ((BYTE << 1) | 1) : (BYTE << 1)
我想將它旋轉到左邊。
現在我測試的:
unsigned char c1 = 1;
unsigned char c2 = 128;
unsigned char c3 = 255;
unsigned char c4 = 200;
printf("%u\n", ROTATE_LEFT(c1)); // Expected: 2, Result: 2
printf("%u\n", ROTATE_LEFT(c2)); // Expected: 1, Result: 257
printf("%u\n", ROTATE_LEFT(c3)); // Expected: 255, Result: 511
printf("%u\n", ROTATE_LEFT(c4)); // Expected: 145, Result: 401
正如你所看到的,我得到的結果should't甚至可能。 有什麼不對?
其實它不是未定義的行爲,請參閱下面的答案。但是,無論如何,「未定義的行爲」是一個您應該熟悉的概念,如果您使用C編程。 –
如果您想使用固定大小的類型,請查看''。 –
@MichaelWalz:其實就是這樣。一個'int'被傳遞並且'unsigned'被期望。 – Olaf