问题如下:1、负数的补码为什么是反码+1 ,干嘛非要加这个1?
2、如何理解INVALID_HANDLE_VALUE(-1) ,这个  如何理解INVALID_HANDLE_VALUE()  是一个函数、而-1是它的参数吗?

解决方案 »

  1.   

    1、负数的补码为什么是反码+1 ,干嘛非要加这个1?
    ====================
    以前读书时老师教过,但是好像只教了取反加1,好像没教为什么,或者教了,但我忘了。2、如何理解INVALID_HANDLE_VALUE(-1) ,这个 如何理解INVALID_HANDLE_VALUE() 是一个函数、而-1是它的参数吗
    ===============
    这个问题问得我都晕了,INVALID_HANDLE_VALUE是一个常量,后面(-1)是表示这个常量的值是-1而已。
      

  2.   

    1. 参考 http://blog.pcware.cn/it/misc/tows_complement_proof.html2. INVALID_HANDLE_VALUE不是函数,是类型转换。
      

  3.   

    1、一个数加上它的反码的结果是所有位都为1,再加上1后变成0(最高位溢出),这样定义补码才能满足一个数与其相反数相加结果为0。
    2、你的写法是错的,或者说没有写完整。INVALID_HANDLE_VALUE是一个宏,其定义为:
    #define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
    在代码中使用INVALID_HANDLE_VALUE等同于((HANDLE)(LONG_PTR)-1)。
      

  4.   

    1.当数值的范围达到一定界限后会产生溢出,补码是一种编码方式,在解决码子溢出方面,负数补码加1和正数加0刚好匹配,不用在意它具体为什么,刚好匹配满足一种类似的数据结构(这样理解可能有点笨拙,不过就是这样的)。
    2.#define INVALID_HANDLE_VALUE ((HANDLE)(LONG_PTR)-1)
    只是个宏而已。
      

  5.   

    #define INVALID_HANDLE_VALUE (HANDLE)-1