美文网首页
int数字的表示

int数字的表示

作者: 赵星宇 | 来源:发表于2014-06-20 14:46 被阅读63次

    在计算机中int型数字使用补码的形式在存储。
    首先说明补码的计算方式。
    正数和零的补码就是他们本身。
    负数的补码是符号位(最高位)不变,其他位取反的结果+1。
    例如
    1的补码为1
    0的补码为0
    -1的原码为
    10000000_00000000_00000000_00000001
    取反码
    11111111_11111111_11111111_11111110
    补码为反码加1
    11111111_11111111_11111111_11111111
    可以看到下面的程序

    #include <iostream>
    using namespace std;
    int main(void) {
        int i = 1;
        cout<<hex<<i<<endl;//1
        i = 0;
        cout<<i<<endl;//0
        i = -1;
        cout<<i<<endl;//ffffffff
    
        unsigned int j = 0x7fffffff;//max int 2147483647
        cout<<dec<<(int)j<<endl;
    
        unsigned int k = 0x80000000;//min int -2147483648
        cout<<(int)k<<endl;
    }
    

    函数形式为:从小到大,然后突然跳变,最后又从小到大
    0->0x7fffffff->0x80000000->0xffffffff
    0->2147483647->-2147483648->-1

    可知对一个数取负的过程为
    1
    0x00000001
    -1
    0xfffffffff
    首先改变符号位
    0x10000001
    然后取补码
    0xffffffff

    有没有更为方便的方法呢?全部取反然后加一即可。

    相关文章

      网友评论

          本文标题:int数字的表示

          本文链接:https://www.haomeiwen.com/subject/qtljtttx.html