判断一个整数是否为负数的一种方法是(使用位运算):
int num_bits = sizeof(int) * 8; //assuming 8 bits per byte!
int sign_bit = given_int & (1 << (num_bits-1)); //sign_bit is either 1 or 0
if ( sign_bit )
{
cout << "given integer is negative"<<endl;
}
else
{
cout << "given integer is positive"<<endl;
}
这种解决方案的问题在于每个字节的位数不能固定为8,可能是9、10、11甚至16或40位。字节并不一定意味着8位!无论如何,可以通过编写以下内容轻松解决此问题:
//CHAR_BIT is defined in limits.h
int num_bits = sizeof(int) * CHAR_BIT; //no assumption.
现在看起来没问题,但它真的没问题吗?这符合标准吗?如果负整数不是以2的补码表示怎么办?如果它在二进制计数系统中的表示方式不需要只有负整数才在最高位有1呢?
我们能写出既可移植又符合标准的代码吗?
相关主题:
原始数据类型的大小
为什么布尔值占用1个字节而不是1个比特?
given_int < 0
的问题在哪里? - Chris Lutz