何时通过单字节XOR逻辑判断两值同号比乘法实现更快?
判断两数同号的两种宏实现对比
判断两个数是否同号时,可采用以下两种宏定义实现方式:
1. 乘法实现的宏
#define same_sign(a,b) ((a)*(b)>=0)
编辑补充:最初代码存在错误,已将
>替换为>=。
2. 单字节XOR逻辑实现的宏
#define INTEL_REVERSED//示例宏,用于指定变量在内存中是否以逆序存储 #ifdef INTEL_REVERSED #define same_sign(a,b) ((~(*((char*)&a+sizeof(a)-1)^*((char*)&b+sizeof(b)-1))&0x80)>>7) #else #define same_sign(a,b) ((~(*(char*)&a^*(char*)&b)&0x80)>>7) #endif
性能与适用场景分析
- 何时XOR实现更快:乘法运算的时间复杂度介于
O(n log n)与O(n²)之间(当数值长度超过4字节时),而逻辑运算的耗时是固定的。因此当操作的数值类型长度超过4字节时,第二种XOR逻辑实现会比乘法实现更快。 - 适用范围差异:
- 乘法实现仅支持整数类型(包含
double、float),但可以接收表达式作为参数; - XOR逻辑实现可适配任意数据类型,但仅支持变量作为参数,无法直接传入表达式。
- 乘法实现仅支持整数类型(包含
内容的提问来源于stack exchange,提问作者markoj
相关产品推荐
相关产品推荐

