浮点数的绝对值

现在计算机中的浮点数基本都是IEEE 754格式的,那么如何求一个浮点数的绝对值呢?

有人想到了:

float x;

if(x < 0)
    x = -x;
嗯,不错,这样也能得到结果。今天我来提供另外一种方法,当然,方法不是我原创,我主要是解释其中的原因。

float x;
*((int *) &x)) &= 0x7fffffff;

double x;
*(((int *) &x) +1) &= 0x7fffffff;

double x;
*((long long int *) &x)) &= 0x7fffffffffffffff;
上面是三个代码片段,它们分别可以求float、double、double的绝对值。按我们一般的想法,第一个和第三个很好理解,就是利用了指针的相互转换将符号位置0,但是,第二个呢?还是用程序来解释最好了。

#include 

int main(void)
{
    double x;
    x = -1.2;
    long long int *pt = (long long int)&x;
    printf("%p: %x ", (unsigned char *)pt,*(unsigned char *)pt);
    printf("%p: %x ", ((unsigned char *)pt+1),*((unsigned char *)pt+1));
    

你可能感兴趣的:(指针,c语言,浮点数)