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了
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了
本文探讨了在不同位宽的整数类型中实现数值补码的方法。通过对比两种不同的代码实现方式,解释了为何使用按位取反操作符~来获取整数的补码是一种更为通用且安全的做法。

被折叠的 条评论
为什么被折叠?



