有一个名为"比较"的现有功能,即
int compare(void* A, void* B) { return (int)A - (int)B; }
Run Code Online (Sandbox Code Playgroud)
我知道这是一个残暴的做法,但我没有编写那段代码,而且它已经在许多地方使用了.但是这段代码在64位下产生了编译错误,因为void*不再是32位,所以我将代码修改为以下内容.
int compare(void* A, void* B) { return (long long)A - (long long)B; }
Run Code Online (Sandbox Code Playgroud)
在当前的64位Linux体系结构下,此函数返回错误结果的可能性有多大?也就是说,两个虚拟地址分开超过0x7FFFFFFF的可能性是多少?
所以我定义..
#define RADIAN(x) x*3.14159265f/180.0f
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
RADIAN(theta-90)
Run Code Online (Sandbox Code Playgroud)
我的程序经常给我不正确的结果,我花了几个小时才意识到上述声明和下面的声明之间存在巨大差异.
RADIAN((theta-90))
Run Code Online (Sandbox Code Playgroud)
现在我的程序运行得很好.为什么第一个陈述不正确?