C++中的最大整数最小整数

调用<limits.h>

INT_MIN, INT_MAX

利用原码、补码、反码及位运算

  1. 机器数与真值
    机器数:在计算机中实际存储的数,如0000 0001
    真值:去掉符号位,根据编码规则推导出的真实值
  2. 原码
    原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。(一种非常容易理解的方式)

正负1的原码表示:

[+1] = 0000 0001
[-1] = 1000 0001

8位二进制数,原码能表示的范围为:

[0111 1111 1111 1111]---->[2^7-1 -2^7-1]---->[-127 127]
  1. 反码
    反码就是在原码的基础上,符号位不变,其余位取反。 (显然,正数的反码还是本身)
    正负1的反码表示:
[+1] = 0111 1110
[-1] = 1111 1110
  1. 补码
    正数的补码就是本身,复数的补码就是其反码加一
    正负1的补码表示:
[+1] = 0000 0001 (补)
[-1] = 1111 1110(反)= 1111 1111(补) 
  1. 为什么要用补码进行运算?
    将减法简化为加法(减去一个正数等于加上这个正数的相反数),且保持只有一个0的表示。(https://blog.csdn.net/wo17fang/article/details/52241682)

6.表示最大最小的整数
看了上面的解释,下面的定义就是自然而然了

int max_int = 0b0111 1111 1111 1111;
int min_int = max_int+1;

进一步简写为:

#define MAX_INT (((unsigned int)(-1))>>1)
#define MIN_INT MAX_INT+1
posted @ 2021-10-14 09:48  Maxwell'Maxwill  阅读(671)  评论(0编辑  收藏  举报