判断两个整数是否同号的最简单方法是什么?是否有一种简短的按位运算技巧可以实现此功能?
判断两个整数是否同号的最简单方法是什么?是否有一种简短的按位运算技巧可以实现此功能?
无分支的 C 版本:
int sameSign(int a, int b) {
return ~(a^b) & (1<<(sizeof(int)*8-1));
}
C++ 整数类型的模板:
template <typename T> T sameSign(T a, T b) {
return ~(a^b) & (1<<(sizeof(T)*8-1));
}
就我个人的想法...
int mask = 1 << 31;
(a & mask) ^ (b & mask) < 0;
对于使用二进制补码算术的任何大小的整数:
#define SIGNBIT (~((unsigned int)-1 >> 1))
if ((x & SIGNBIT) == (y & SIGNBIT))
// signs are the same
如果 (a*b < 0) 则符号不同,否则符号相同(或者 a 或 b 为零)
假设是32位
if(((x^y) & 0x80000000) == 0)
...答案if(x*y>0)
由于溢出而不好
#include<stdio.h>
int checksign(int a, int b)
{
return (a ^ b);
}
void main()
{
int a=-1, b = 0;
if(checksign(a,b)<0)
{
printf("Integers have the opposite sign");
}
else
{
printf("Integers have the same sign");
}
}
std::signbit(firstNumber) == std::signbit(secondNumber);
double
,float
,char
等)。int same_sign = !( (x >> 31) ^ (y >> 31) );
如果 same_sign 为真,则... 否则...