int难道不是占4个字节么?

来源:2-4 基本数据类型

小池的呆妞

2015-01-18 12:32

然后那个取值范围是怎么计算的呢?

写回答 关注

7回答

  • Fiona0126
    2015-01-18 13:20:24
    已采纳

    恩,现在流行的编译器,都是规定的int是四个字节~像tc这样老版的编译器,int才是两个字节,然后也是一样,由于一个字节占八位,最高为符号位,又人为规定,1000000000000000......这个补码编码为-2^31所以,范围就是-2^31~2^31-1

    火Rain 回复Fiona0...

    取反加1 是在最末尾加1,比如 原码10011,反码为11100,补码为11101! 我对第二个问题的答案并不认同!请大大指教下我所作的关于int范围的总结,在回答当中!

    2015-03-05 11:46:29

    共 11 条回复 >

  • 火Rain
    2015-03-05 10:59:08

    ——关于int(4字节)的取值范围由来(-2^31~2^31-1)?
    1.【32位】一个字节占8位,所以4字节总共是占32位,然后去掉第一位,也即符号位(1:负,0:正),也就剩下31位!

    2.【最大值:2^31-1】为什么不是2^31?

    (1)假设只有三位,其中首位为符号位的话,最大值的情况不就是011吗?也即表示3.
    3 = 2^(3-1)-1.

    (2)32位的时候同理,01111111 11111111 11111111 11111111 //而这个数表示的值就是2^31-1.
    2^31-1 = 2^(32-1)-1.

    3.【最小值:-2^31】为什么不是-(2^31-1)?

    (1)因为数据是由二进制补码存储的:
    1)当原码为正数的时候,正数的原码反码补码都相同,即00011的反码也为00011,补码也为00011.
    2)当原码为负数的时候,反码即按位取反,比如10011为原码,10011可表示-3,那么符号位不变,其余位按位取反即反码11100.那么10011的补码便是11101.

    (2)所以可知int所取的最小值原码为:11111111 11111111 11111111 11111111.
    它的反码为:10000000 00000000 00000000 00000000. (在原码中表示-0.)
    它的补码为:10000000 00000000 00000000 00000001. (在原码中表示-1.)
    依次可以类推-2,-3,-4......-2^31!
    【推到-2^31】
    其原码为10000000 00000000 00000000 00000001 
    其反码为11111111 11111111 11111111 11111110
    其补码为11111111 11111111 11111111 11111111
    从上可知最小值只能表示到-2^31,而无法表示到更小的一位:-2^31-1!


    4.【综上所诉,int(4字节)范围是:-2^31~2^31-1】!

    (自己对于这个问题也纠结了很久,得出的结论若有不足之处,敬请批评指正,谢谢!)

  • 火Rain
    2015-02-28 10:03:53


    计算机是按二进制方式存储数据的,在计算机中表示整型数据有以下几种方法:        

    1.二进制补码:二进制补码在计算机中比较常用,当表示负数的时候,在原来原码的基础上再加1

    2.二进制反码:二进制反码是简单地把正数取反就是对应的负数了,比如00000001为1,11111110为-1      

    3.偏移表示法: 偏移表示法用一个数与它相减就得到所需的数          

    4.带符号的数表示法:最高有效位是符号位,1为负,0为正。比如:00000001为1,10000001为-1


    注:正数的原码反码补码都相同,即0011的反码也为0011  

    举例来说:对于正数3,其二进制形式为 0011,我们把 0011称为真值,在计算机中用0或1表示正负号,那么 0011在计算机中原码可以表示为00011(第一位为符号位)。反码补码不变。

    对于负数,反码即按位取反,比如10011可表示-3,10011为原码,那么符号位不变,其余位按位取反即反码11100.  补码的存在是为了简化计算的,其符号位一起参加运算,从而对于减法可转化为加法。补码的实质就是mod2。比如我们的钟表是mod12的,那么14点钟我们也可以说是下午2点。获得补码的方法是“按位取反,末位加1”那么10011的补码便是11101.。。。。。。。。。。  

    机器数即数值在计算机中的表示形式。  

    (注:以上是本人查找整理的有关原码、反码和补码的知识,恶补一下自己的储量!若有不足之处,请大大们批评指正,感谢!)

  • 火Rain
    2015-02-28 09:30:38

    这个问题,很赞的说,路过学习!

  • 我的仰视30
    2015-01-23 13:32:54

    不是,占2个字节


  • Erik_Song
    2015-01-18 13:36:01

    学习了 

  • Erik_Song
    2015-01-18 12:41:13

    2个字节 1字节 = 8bit so。。。。

    dire 回复小池的呆妞

    这个不是统一规定的 是根据个人的编译器 CPU来规定的 你可以写代码在你的编译器里面判断 你的各个数据类型所占的字节 这个可以百度一下 c语言中的 sizeof()函数

    2015-05-22 20:25:14

    共 2 条回复 >

C语言入门

C语言入门视频教程,带你进入编程世界的必修课-C语言

926024 学习 · 20793 问题

查看课程

相似问题