转自:http://hi.baidu.com/bystander1983/item/e1c11a4152242811886d1051
unsigned int zero = 0;
unsigned int compzero = 0xFFFF;
/*1's complement of zero */
对于一个int型不是16位的处理器为说,上面的代码是不正确的。应编写如下:
unsigned int compzero = ~0;
为什么啊?
网友回复:unsigned int compzero = 0xFFFF;
只写了2个字节,16位的才符合
32位的可以写:
unsigned int compzero = 0xFFFFFFFF;
但unsigned int compzero = ~0;更安全,不管有多少位,直接取反,把所有的0都变成1了
本文解释了在不同位数的处理器中,如何正确使用补码表示零,并通过取反操作得到补码值。特别强调了在32位处理器上取反操作更安全,因为它能够确保所有位都被翻转。
1566





