nginx Firefox 程序员 Python apache shell 云计算 mysql 开源 Ubuntu 微软 编程 Android Windows php google linux centos wordpress java

C语言求解相反数程序

给定一个整数,要你求出它的相反数。你怎么做?这是前几天在csdn编程挑战中看到的一个问题,开始我想的是这样做。

int X(int key)
{
    return -key;
}

当然你可以使用2次减法,像这样

int X(int key)
{
    int result = key;
    result -= key;
    result -= key;
    return result;
}

后来想了一下换成下面这样的形式

int X(int key)
{
    key = ~key;
    key += 1;
    return key;
}

先对key取反,然后再加1.你可能觉得这样不直观。但是如果你编译一下,函数的确是返回key的相反数。这是为什么呢?让我们来看看有符号整数在计算机中的二进制表示:

+1 : 00000001
-1 : 11111111
+5 : 00000101
-5 : 11111011

//采用的是八位整数
//有符号数最高位表示正负
//1为负,0为正

如果仔细观察会发现把他们的二进制相加都是 100000000,由于采用的是8位小数,第九位的1溢出了,于是结果变成了 00000000,也就是0。这不就是相反数相加起来得0?

于是上面的第三个X函数就这样工作了。这和原码,反码,补码有一点关系,具体你可以看看这篇文章

现在看看这些二进制的东西,感觉自己对编程的理解又稍稍深入了那么一点。C语言是个好东西,可以用一辈子。:)

延伸阅读

评论