为什么是-2,147,483,648 到 2,147,483,647---------------------------------------而不是-2,147,483,647
    到 2,147,483,647

解决方案 »

  1.   

    Avoid负数最小值可以用1000000...(31个0)来表示?1000000...(31个0)不是等于0吗?如果第一个位代表正负的话~
      

  2.   

    对于int a = -0;那么编译器会把它处理成int a = 0;
      

  3.   

    楼主可以去买块豆腐撞死了Avoid(千金散尽还复来)都讲那么清楚了用 1000000...(31个0)这个用来代替11000000...(31个0)用32位的数来代替33位。。什么脑子阿?
      

  4.   

    louzejun我理解得不对吗,前者就是32位,后者就是33位.的确是用32位来表示33位的数.因为32位还有一个-0没有意思,就用它来表示本来应该是33位的-2,147,483,648--------------------------------------------------------------------------哼,别以为我笨,我比猴子还精咧,哈哈~
      

  5.   

    其实脑子应该有这样一个概念!
    由于32BIT位应该可以表示偶数个数
    所以你总感觉正负数的数量应该对称,但你可别忘了有0的存在,你可以把0划分到整数这边,这样数量就一样了。
    -2,147,483,648 到 1:共2,147,483,648个负数
    0 到2,147,483,647 : 共2,147,483,648个正数
    所以正数不可能达到共2,147,483,648,因为32bit位已经表示满了。 如果你真想知道补码的表示方法,你可以参考计算机组成原理,那里面有对应的直角坐标系表示的补码函数图。
      

  6.   

    0x80000000到0xffffffff是负数,0x00000001到0x7fffffff是整数,你换算成十进制看看!
      

  7.   

    自己看看 MSDN 比这问强  要出 下个问题 你怎么办 ?
      

  8.   

    我发现32位计算机和64位计算机上,C#的int范围是不一样的!是不是啊?
      

  9.   

    回楼上,应该是一样。c#里面int的取值范围,应该由声明变量那时决定,而不是取决于硬件环境。
      

  10.   

    /// <summary>
        /// 判断用户是否登录
        /// </summary>
        /// <returns></returns>
        public bool IsLogin()
        {
            if (Request.Cookies["userName"] == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
      

  11.   

    /// <summary>
        /// 判断用户是否登录
        /// </summary>
        /// <returns></returns>
        public bool IsLogin()
        {
            if (Request.Cookies["userName"] == null)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
      

  12.   


    应该是不一样的,可以这么认为,int 变量是一个特殊的变量。它是取计算机的总线宽度。
    这也是32bit 和64 bit 计算机不同的地方。这也正是体现了,C#和微软的强大。其实任何编程语言应该都是这样的。应该看int是在编译器和语言规范里怎么定义的吧,也没仔细研究过