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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM