首页 > 编程 > 10的反,是多少?int型内存存放方式的一个小总结

10的反,是多少?int型内存存放方式的一个小总结

2010年6月17日 小卢 发表评论 阅读评论
昨天自习室,献哥读这本《c缺陷与陷阱》,看到激情之处,和我讨论 ~10 为多少?
想了一下,32位系统下是…结果算了半天没有一个确切的结果,我才晓得是这一块本科2年纪学的东西,都忘记差不多了。
回来翻翻书,百度、google一把,终于整明白了。
做个记录:
在计算机中,int数据是用补码形式保存的,用补码表示有两个好处:
(1)使符号位能与有效值部分一起参加运算,从而简化运算规则.
(2)使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的。
关于补码的详细介绍,我们可以看百科把(点我学习补码)
因此,我们可以计算出~10的过程:
10 = 00000000 00000000 00000000 00001010 (bin)
因此对10取反即为:
~10 = 11111111 11111111 11111111 11110101 (bin)
我们晓得,计算机中用补码表示,因此对 该补码求反,然后 + 1 就得到原址,当然啦还有符号。呵呵
11111111 11111111 11111111 11110101 (bin)
计算即为
-11 = – ( 00000000 00000000 00000000 00001011 (bin) )
这个应该是比较基础的了,都是以前的学的知识,看来还是基础不够扎实啊!呵呵
突然又想起了,前天面中兴的时候那位哥哥问的一个问题:int 范围 ,这个当然晓得: 2^31到 2^31-1
但是如果,深究一下,为什么呢?解释一下?
可能又牵扯到了内存中为的存储方法了,int 在内存中存储的是反码,第一位为符号位。具体可参考1.
我比较懒。引用论坛里一大牛写的吧:
考虑8位情况00—-ff(hex),也就是00000000(10进制0)—-11111111(bin)<10进制255>
它一共能直接表示的数值个数是2^8=256个,非负数:0-127(ff hex)<128个>
负数-1~-128<128个>
于是8位的范围就是-128~127 (-128,-127….-1,0,1,2,….127 <total 256>
注意01111111,这是8位中最大正数,0是符号位,那么显然能表示的最大正数是7F(hex)=127
还有一个0,剩下的就是负数,256-1-127=128个,就是-1~-128
为什么有 -128呢?
我们可以考虑,10000000(bin),也就是说 -0 的情况,在内存中反码表示。我们可以计算,“按位取反,末位加一”的方法,即为 10000000(bin) = 128 , 加上符号位。即为 -128 。
同理,n位整型范围是-2^n~~~2^n-1
参考 :
补码:
反码:
关于2的补码:
分类: 编程 标签:
  1. 菜鸟
    2010年8月29日22:51 | #1

    这个问题真是纠结了我好久了。有一种 拨云见日的感觉!

  2. 2010年9月27日08:46 | #2

    这个还是以前在培训班的时候学的

  3. 2011年9月19日11:50 | #3

    看了之后受益很大额

  4. 2011年9月23日09:47 | #4

    这个不懂了好久,现在终于懂了

  5. 2011年11月20日20:27 | #5

    真可爱的说 哈哈

  1. 本文目前尚无任何 trackbacks 和 pingbacks.

Blog performance enhanced by PHP Speedy Blog performance enhanced by PHP Speedy