检查给定整数是否为负的一种方法可能是:( 使用位操作)
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;
}
Run Code Online (Sandbox Code Playgroud)
该解决方案的问题是每字节的比特数不能是8,它可以是每个字节9,10,11甚至16或40比特.字节不一定意味着8位!无论如何,这个问题可以通过写作轻松解决,
//CHAR_BIT is defined in limits.h
int num_bits = sizeof(int) * CHAR_BIT; //no assumption.
Run Code Online (Sandbox Code Playgroud)
现在好像很好.但它真的吗?这个标准符合吗?如果负整数不表示为2的补码怎么办?如果它是代表一个二进制记数系统,不必要只负整数有1个在它的最显著位?
我们可以编写既可移植又符合标准的代码?
相关主题:
原始数据类型的大小
为什么布尔1字节而不是1位大小?
将整数转换为相应的无符号类型,然后您不必担心正在使用什么有符号表示形式。唯一剩下的问题是可能存在填充位。这是一个没有位移位的解决方案,因此不依赖于与位大小匹配的位宽度:
#define IS_NEG(x) ((unsigned_type)x & (unsigned_type)-1-(unsigned_type)-1/2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1810 次 |
| 最近记录: |