码迷,mamicode.com
首页 > 其他好文 > 详细

有符号整数类型的范围问题

时间:2015-11-06 07:21:39      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:计算机   二进制   基本数值类型   

符号整数类型的范围:

整数类型:byte,short,int,long

byte: 8 位 -128--->127

short 16位 -32768--->32767

int   32位 -2147483648-->2147483647

long  64位  -9223372036854775808 --> 9223372036854775807

为什么是这样这样的范围:

原码:讲一个数转换为二进制,加上符号位就是原码(0表示整数,1表示负数)

反码;整数的反码就是其原码,负数的反码就是除符号外,每位取反。

补码:整数的补码就是其原码,负数的补码是其反码加一。

例如:      单字节5,-5的原码为:0000 0101      1000 0101

              5,-5的反码为:0000 0101      1111 1010

              5,-5的补码为:0000 0101      1111 1011   

为什么计算机要用补码表示负数。

优点:

1防止有“俩个零”。八位本来可以表示256个数据,如果用原码表示,0000 0000 和 1000 0000都表示零。

补码 0000 0000 和 1111 1111都表示零,这就有点奇怪了。但是用补码表示呢?只有0000 0000 这一种表示方法。

2方便计算机运算:

求补运算:

2正数的求补方法和负数的求补方法相同如。

         -5的补码      逐位求反    加一得5的补码     

-5 -> 5: 1111 1011 -> 0000 0100 -> 0000 0101

          5的补码      逐位求反    加一得-5的补码    

5 -> -5: 0000 0101 -> 1111 1010 -> 1111 1011

2方便运算,变减法为加法。

3.....

这些只需要了解一下即可。

回归原题;为什么8位的byte型数据为什么范围是-128到127呢,了解了这个知识点我们就知道了。

8位补码最大为:0111 1111(127) 最小为:1000 0000(-128)

16位,32位,64位类似。

所以,n位类型表示有符号数范围为 -(2^(n-1))->2^(n-1)-1

本人是菜鸟,欢迎大家指正。


本文出自 “最好的风景” 博客,请务必保留此出处http://runrun.blog.51cto.com/9754749/1710154

有符号整数类型的范围问题

标签:计算机   二进制   基本数值类型   

原文地址:http://runrun.blog.51cto.com/9754749/1710154

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!