zoukankan      html  css  js  c++  java
  • int_32的最大值与最小值(C/C++)

    INT_32的最小值

    十进制表示为$-2147483648$,转化为二进制:$1000 0000 0000 0000 0000 0000 0000 0000$。

    第一位$1$既是符号位,也是数值位:$-2_31 = 2,147,483,648$。

    INT_32的最大值

    十进制表示为$2147483647$,转化为二进制:$0111 1111 1111 1111 1111 1111 1111 1111$。

    $2147483647 = 2_{30} + 2_{29} + 2_{28} + ... + 2_3 + 2_2 + 2_1 + 2_0$。

    【注意:INT_32中最小值(负数)的绝对值比最大值(正数)的绝对值大1。】

    计算机中的原码、反码与补码

    在计算机系统中,数字都是以二进制补码的形式进行存储的。

    (1)正数的原码、反码、补码保持一致。

    (2)负数的原码,第一位为符号位(0表示正数,1表示负数)。

    反码:符号位不变,后续各位取反。

    补码:符号位不变,在反码的基础上加1(最后一位)。

    几个特殊的补码

    +0的补码:$0000 0000 0000 0000 0000 0000 0000 0000$

    -0的补码:

    原码 1000 0000 0000 0000 0000 0000 0000 0000 0000
    反码 1111 1111 1111 1111 1111 1111 1111 1111 1111
    补码 0000 0000 0000 0000 0000 0000 0000 0000 0000

    +0和-0的值在计算机系统是一致

    0取反的结果:

    0的原码 0000 0000 0000 0000 0000 0000 0000 0000 0000
    ~0(按位取反) 1111 1111 1111 1111 1111 1111 1111 1111 1111
    ~0转化为十进制 1000 0000 0000 0000 0000 0000 0000 0000 0001

    即~0 = -1。                

    按位移动

    以下是在GCC下验证的结果,不同的编译器结果可能不一样。

    按位左移:对于有符号数,符号位保持不变,其它位是逻辑左移。对于无符号数,所有位都是逻辑左移。

    按位右移:对于有符号数,符号位保持不变,其它位是逻辑左移。对于无符号数,所有位都是逻辑左移。

    -9(原码) 1000 0000 0000 0000 0000 0000 0000 1001
    -9(反码) 1111 1111 1111 1111 1111 1111 1111 0110
    -9(补码) 1111 1111 1111 1111 1111 1111 1111 0111
    右移1位 1111 1111 1111 1111 1111 1111 1111 1011
    输出(反码) 1000 0000 0000 0000 0000 0000 0000 0100
    输出(补码) 1000 0000 0000 0000 0000 0000 0000 0101

    十进制输出:-5。

    参考资料:

    https://blog.csdn.net/ccozkf/article/details/104061067

    Min是清明的茗
  • 相关阅读:
    视图组件之开关按钮
    单选框与复选框的实现
    String、StringBuffer 、StringBuilder 的区别(转)
    布局管理器之相对布局(二)
    布局管理器之相对布局(一)
    帧布局 FrameLayout
    表格布局TableLayout
    布局管理器中的线性布局
    36选7
    冒泡
  • 原文地址:https://www.cnblogs.com/MinPage/p/14206580.html
Copyright © 2011-2022 走看看