int数字的表示

在计算机中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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在计算机中,使用二进制表达数字,例如,一个字节(8位)可表示的范围是0到255(在不考虑符号的情况下),即0000...
    两句挽联阅读 5,695评论 0 52
  • 1.你自已决定是否需要有正负: 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个...
    Xiho丶阅读 2,137评论 0 2
  • 一、二进制:所谓二进制就是逢二进一 (0,1), 因为使用二进制只有 0, 1 两个数,简单,易于电子方式实现 ...
    hello大象阅读 3,505评论 0 1
  • 在分析之前必须先明确如下几点: 1.Java是用补码来存储负数的,也就是说我们对一个数进行取反输出,输出的其实是一...
    LiChangBao阅读 4,446评论 0 1
  • 我们已经知道计算机中,所有数据最终都是使用二进制数表达。我们也已经学会如何将一个10进制数如何转换为二进制数以及如...
    FantJ阅读 36,969评论 9 29