zoukankan      html  css  js  c++  java
  • 为什么宏INT_MIN要写成21474836471

    《深入理解计算机系统》在P105页,作者给出了INT_MIN在标准头文件limits.h中的定义

     

    1. #define INT_MAX 2147483647 
    1. #define INT_MIN (-INT_MAX - 1) 

     

    源文档 <http://blog.csdn.net/seizef/article/details/7605010>

     

     

    查到了一篇文章http://www.hardtoc.com/archives/119

    文中说,-2147483648是一个常量表达式,而不是一个常量。所以-2147483648被理解为一个“-”号和一个常量值2147483648。对于“-”,是对原值补码进行“取反加1”操作。

    对于没有后缀的常量,计算机匹配顺序为:

    C98 int, long int, unsigned long int

    C99 int, long int, long long int

    由于2147483648超出了有符号常量的表示范围,所以变成了unsigned long intlong long int,而写成-2147483647 - 1则可以精确的表示成为32位有符号整数的最小值。

     

    如以下代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    #include <stdio.h>
    #include <limits.h>
    #include <float.h>
     
    int main(void)
    {

              unsigned long int I = -2147483648;  //i的值为2147483648

            if(-2147483648>0)     printf("positive\n");//实际值为+2147483648
           
    if(-2147483647-1<0)printf("negative\n");
           
    if(INT_MIN==-INT_MIN)printf("equal\n");
           
    if(FLT_MIN>0)         printf("floating\n");
     
            return0;
    }

     

    源文档 <http://www.hardtoc.com/archives/119>

     

    由于-2147483648是常量表达式,其中2147483648超出了intlong int的表示范围,故调用unsigned long int类型,即为:

       10000000 00000000 00000000 00000000    :无符号型,表示正数2147483648

    -2147483648,即对上式取反+1,为:

          01111111 11111111 11111111 11111111 + 00000000 00000000 00000000 00000001

     = 10000000 00000000 00000000 00000000 :无符型,值2147483648

    I =2147483648;

     

    如果令代码为 int I  = -2147483648,i被强制转换为int型,即为i的值为: -2147483648。

     

    结论:计算机中单独的一个-2147483648”表达式在32位机中实际值为2147483648。

     

     

    int I = 2147483648,溢出int范围,则i的值为 -2147483648

    2147483648用unsigned型表示为:

    10000000 00000000 00000000 00000000,转换为int后,即为 -2147483648的计算机中补码形式。i的值为-2147483648

     

    int I = -2147483649,则其无符型表示为

    10000000 00000000 00000000 00000001,转换为int型为 -2147483647

  • 相关阅读:
    (转载)UITableView的详细讲解
    (转载)ios关闭虚拟键盘的几种方法
    (转载)NSTimer
    (转)FirstResponder 释放问题
    (转)IOS UITableView学习
    UITableView中的(NSIndexPath *)indexPath
    iOS开发UITableView基本使用方法总结1
    xcode快捷键的使用
    k8s1.13.0二进制部署-master节点(三)
    k8s1.13.0二进制部署-node节点(四)
  • 原文地址:https://www.cnblogs.com/baiweiguo/p/2861286.html
Copyright © 2011-2022 走看看