码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员——java基础——负整数相关计算及其原因

时间:2016-01-06 17:47:44      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 

  时间—— 2016年1月6日15:33:02

1、整数类取值范围及其分析?

  我们知道整形的取值范围为-2^31~2^31-1,但是我就很纳闷为什么负数哪里没有减1,而整数这里却减1。在加上左边可以利用等差数列计算出来其最大值的确是2^31-1。可是我去计算负数的时候,纳闷了。我们知道正负数的符号位就是第三十一位,而往往符号位是不参与运算的。有些朋友可能会说,10000000000000000000000000000000正好是-2^31,这不正好解释吗。如果时这样的话,那无法解释10000000000000000000000000000001是-2^31+1。既然无法通过计算那么我们怎么知道最小负正数为-2^31?结果是这样的,我们知道整形一共是32位,除过除去符号位只剩下31位,每一位两种可能,所以一共2^31中可能,正整数从0开始,所以最大数为2^31-1(数组有五个元素,最大的小标是4一个原理),而负整数从-1开始,所以是-2^31。

2、为什么负整数不能用正整数的计算方法呢?

  至于负数的二进制表现形式是这样子的,当年计算机工程师想最小的负整数为-2^31,而那一定是除过符号位其他位什么都没有,那一定就是10000000000000000000000000000000,而比最小值大一点的就1就从最右边加一,依次类推,最终-1二进制11111111111111111111111111111111,所以看到一个二进制最原始的计算方法就是,除过符号位把其当做一个整数,算出结果之后减去2^31(加上最小值),但是那种计算方式是在太麻烦。

3、如何写出一个负数的二进制形式呢

  我们经过观察-1和0的二进制代码互为反码,-2和1的二进制代码互为反码,依次类推,-(x+1)和x的代码互反,所以想要求一个负数的二进制代码,一定是找到代码和其互反的整数的代码,然后取反码运算。假如-8的代码就是先写出7的代码,然后取反码。

4、看到一个负数的二进制如何计算出其十进制的值呢

  我们从第三条知道,看到一个负数的二进制可以先取反码,算出正数,接着加1,取负数就Ok了。-(x+1)和x的代码互反。那可以看成一个负数的代码先取反码,计算出了x,然后加1取负数,就求出了原先的-(x+1)。

5、取反码的快捷运算  

  我们知道-(x+1)和x的代码互为反码,所以一个整数的反码就是先加1在取负数,一个负数的反码也是先加1取负数,所以只需要就只加1取负数。

6、总结

  以前自己在这里总弄不清楚,虽然这些东西现在都被包装成了方法,完全不用自己计算。但是还是那句话,我喜欢那种困扰自己多年的问题被解决的过程,很爽。加油李创。

  

  

黑马程序员——java基础——负整数相关计算及其原因

标签:

原文地址:http://www.cnblogs.com/xinan426620/p/5106251.html

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