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

-----------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、总结:

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

  

  

时间: 2024-12-29 12:58:01

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

黑马程序员——Java基础---IO(下)

黑马程序员——Java基础---IO(下) ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java除了基本的字节流.字符流之外,还提供了File类.properties类.打印流.序列流等和输入输出相关的类,它们能够帮助我们更好的处理信息.下面将对它们进行简单的介绍. 一.正

黑马程序员--Java基础--01基本概念

1.Java的三大技术架构 JAVAEE(Java Platform Enterprise Edition):  开发企业环境下的应用程序,主要针对web程序开发: JAVASE(Java Platform Standard Edition): 完成桌面应用程序的开发,是其他两者的基础 JAVAME(Java Platform Micro Edition): 开发电子消费产品和嵌入式设备,如手机中的程序 我对三大技术构架理解 1.三大技术是指哪三大技术呢? 答:三大技术分别指JAVAEE,JAV

黑马程序员——Java基础---集合框架工具类

黑马程序员——Java基础<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------ 一.概述 Java为操作Set.List和Map提供了一系列工具类,主要有Collections和Arrays.这两个工具类的特点:类中的方法都是静态的,不需要创建对象,直接使用类名调用即可.Collections:是集合对象

黑马程序员——java基础——多线程

 黑马程序员--java基础--多线程 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程:就是进程中的一个独立的控制单元.线程在控制着进程的执行.一个进程中至少有一个线程. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量.

黑马程序员——java基础---IO(input output)流字符流

黑马程序员——java基础---IO(input output)流字符流 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- io(input output)流特点: 1,io流用来处理数据之间的传输 2,java对数据的操作是通过流的方式: 3,java用于操作流的对象都在io包中: 4,流按操作数据分为两种:字节流和字符流: 5,流按流向分为:输入流和输出流. 注意:流只能操作数据,而不能操作文件. 3.IO流的常用基类: 1)字节流的抽象

黑马程序员——java基础——反射

 黑马程序员--java基础--反射 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 反射 其实就是动态加载一个指定的类,并获取该类中的所有的内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员. 反射就是把Java类中的各种成分映射成相应的java类. 简单说:反射技术可以对一个类进行解剖. 反射的基石-->Class类 1.java中的类是用来描述一类事物的共性,该类事物有什么属性,没有什么属性

黑马程序员——java基础——内部类

 黑马程序员--java基础--内部类 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 内部类 如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内部类,必须要建立内部类的对象. 内部类的访问规则 1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有

黑马程序员——java基础——集合(Collection)

 黑马程序员--java基础--集合(Collection) ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 集合框架的构成及分类,如下图: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 3.

黑马程序员——Java基础篇之对象归要

1.static关键字 1.1.static可以修饰成员变量,成员方法,还有类(其中这里的类是内部类) 1.2.static修饰的部分会随着类的加载而加载: 加载过程:当JVM执行static修饰的代码时,会在内存的共享区给static部分开辟一个空间,供该类持有,static部分不是某个对象的部分,而是该类共有的,所以当一个函数会被多个对象调用时,最好定义成static,这样比较节省空间. 1.3.静态方法只能访问静态成员 原因:如果静态方法中调用了非静态的变量,那么由于静态方法是随着类的加载