- java语言
- 特点
- 平台无关性
- 一次编译 处处运行
- 与操作系统 处理器无关
-
- 与操作系统 处理器无关
- 可移植性的最大支撑
- 核心机制
- JVM Java虚拟机
- Java 源程序被 Java 编译器编译成虚拟机能够识别的字节码(class) 字节码文件是平台无关的并且体系结构中立
- class文件与类名一致 如果不一致 将类名前面的权限修饰符(public)删除
- JVM可以解释并执行这些与体系结构无关的字节码文件 实现跨平台运行
- 以此Java可以实现结构中立,并具有跨平台性
- Java 源程序被 Java 编译器编译成虚拟机能够识别的字节码(class) 字节码文件是平台无关的并且体系结构中立
- JVM Java虚拟机
- 一次编译 处处运行
- 面向对象
- 将数据封装于类中 完全面型对象
- 封装
- 隐藏细节 只给出使用信息、使用方式
- 隐藏对象的属性和实现细节
- 隐藏细节 只给出使用信息、使用方式
- 继承
- 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
- 一个儿子只有一个爸爸 单继承(Java只支持单继承 多重继承是通过一个类继承多个接口实现的)
- 普遍性
- 父类中有的成员变量方法 子类也有
- 特殊性
- 增加父类没有的变量和方法 或者修改父类已有的变量和方法
- 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
- 多态
- 不同类的对象接受到相同的信息时 得到不同的结果
- 分类
- 静态多态性
- 动态多态性
- 实现
- 方法重载
- 一个类中有多个相同名字的方法 但这些方法的参数不同 参数个数或者参数类型不同
- 方法覆盖
- 在子类中重写了父类的同名方法
- 方法重载
- 分类
- 不同类的对象接受到相同的信息时 得到不同的结果
- 封装
- 将数据封装于类中 完全面型对象
- 简单
- 相比于c++
- 安全
- 分布式
- 健壮
- 解释型
- 多线程
- 高性能
- 跨平台
- 可移植
- 平台无关性
- java之父
- 高司令
- 主函数(入口函数)
- 程序的入口
- 面向对象OOP
- 对象与类
- 类
- 类是同一类型对象的抽象,对象是类的实体化
- 对象
- 属性 方法
- 对象就是事务的名字
- 每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
- 对象的状态用来描述对象的基本特征。
- 对象的行为用来描述对象的功能。
- 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来
- 类
- 面向对象的三个特性
- 封装 继承 多态
- 对象与类
- 与c/c++的比较
- 不支持指针
- 单继承
- 自动内存管理
- Java平台
- java ME java微型版
- 嵌入式
- Java SE Java标准版
- 桌面应用程序 低端服务器运用 Java Applet
- Java EE Java企业版
- 企业级服务运用
- java ME java微型版
- JDK JRE JVM
- JDK Java开发平台 包括了JVM
- JDK=JRE+开发工具包
- JAVA开发工具(jdk\bin)
-
- 基础开发库(jdk\jre\lib\rt.jar)
- 基础开发库的源码(jdk\src.zip)
- JAVA开发工具(jdk\bin)
- JDK=JRE+开发工具包
- JRE Java运行环境 JDK的子集 包括了JVM
- 只运行不开发Java 使用JRE就足够了
- JRE=JVM+核心类库
- 只运行不开发Java 使用JRE就足够了
- JVM Java虚拟机 跨平台的核心
- JDK Java开发平台 包括了JVM
- 系统
- 64的系统可以兼容32位的软件
- 编程方法
- 默写
- 改写
- 主动编程
- 主动交流
- 自习知识
- 复习半小时
- 总结今天半小时
- 预习半小时
- 总结今天半小时
- 复习半小时
- 特点
- Java语言基础
- 概念
- 注释
- javadoc -d mydoc 类名.java 生成mydoc 文档 注释文档
- 标识符
背过- 特定规则字符数列 用来作为类、方法、变量、数组、文件的名字
- 中文(基本不用)、字母数字下划线、$$ 组成的字符串
- 条件
- 第一个字符不能是数字
- 标识符不能是NULL
- 标识符不能是关键字
- 标识符不能是布尔常量true false 或者 null
- 保留关键字 goto、const
- 标识符不能是布尔常量true false 或者 null
- Java标识符区分大小写
- 最好 见名知意
- 不要中英文结合/不要用拼音
- 第一个字符不能是数字
- 条件
- 规范
- 项目
- test_1.20.103
- 包 小写
- com.sun
- 包名 全小写 公司域名倒着写 用.分隔
- com.sun
- 类和接口 首字母大写
- 方法 大小写混合
- getBackground()
- 变量 大小写混合
- 项目
- 组成规范
- 见名知意
- 驼峰规则
- 大驼峰(类、接口)
- 一个单词
- 首字母大写
- 多个单词
- 每个单词首字母都大写 MyClassName
- 一个单词
- 小驼峰(方法、变量)
- 一个单词
- 首字母小写
- 多个单词
- 首字母小写其他字母首字母大写 myClassName
- 一个单词
- 大驼峰(类、接口)
- 中文(基本不用)、字母数字下划线、$$ 组成的字符串
- 特定规则字符数列 用来作为类、方法、变量、数组、文件的名字
- 关键字
- 概念:已经被java定义了特殊含义的单词
- 特点:全部是小写
-
- 2个保留字:const 与 goto ,目前还没有明确意义的关键字
- 还有3个不可以用作标识符的单词:true false null
-
- 特点:全部是小写
- 概念:已经被java定义了特殊含义的单词
- 异常
- 运行时异常:都是RuntimeException类及其子类异常,如NullPointerException(空指针异常)、IndexOutOfBoundsException(下标越界异常)等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。
- 非运行时异常 (编译异常):是RuntimeException以外的异常,类型上都属于Exception类及其子类。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过
- 注释
- 数据类型
- 基本数据类型
- 数值类型
- 整数类型
- byte
- 一字节(1个字节等于8位二进制)
- -128~127
-
- -128~127
- 一字节(1个字节等于8位二进制)
- short
- 2字节
- -2^15~2^15-1
- 2字节
- int
- 4个字节
- -2^31~2^31-1
- 4个字节
- long
- 8个字节
- -2^63~2^63-1
- 8个字节
- byte
- 浮点类型
- float
- 单精度 32位 4字节
- double
- 双精度 64位 8字节
- float
- 整数类型
- 字符类型 char
- 2字节(一个中文字)0~65535
- 转义字符
- \b 退格
-
- \t 横向制表符
- \n 换行
- \r 回车
- \b 退格
- char类型也可以存数字,但0~127以内的数字会从ASCII码表查出的对字符显示 128~65535这些范围内的数字也可以保存,但是eclipse一般显示为?
- * char类型的的数组在底层代码中做了处理,可以直接打印数组的具体元素
- * 其他需要 Arrays.toString( ) 否则打印出地址值
- 转义字符
- 2字节(一个中文字)0~65535
- 布尔类型 boolean
- 1字节
- 值 只有true flase
- 1字节
- 包装类
- 常用的转换关系:
- 1 Byte = 8 bits (1字节 = 8位)
- 1 KB = 1024 Bytes 1 MB = 1024 KB 1 GB = 1024 MB
- 数值类型
- 引用数据类型
- 除了基本数据类型都是引用数据类型
- String int[ ]
- 除了基本数据类型都是引用数据类型
- 数据类型的转换
- 1.自动数据类型转换
- 从小到大自动转换
- 1.1)数值型
- byte->short->int->long->float->double
- 整型->浮点型,在整数值后直接加.0
- 1.2)字符转数值型
- char->int->long->float->double
- 1.1)数值型
- 从小到大自动转换
- 2.强制数据类型转换
- 从大转小,且大类型实际存储数据是在小类型的范围之内的;
- 注意
- 浮点型转整数型的时候,小数部分全部舍弃,精度损失。
- 数据大转小进行强制类型转换,底层做法从最低位开始获取强转为的类型对应的字节数---(二进制讲)
- 数据类型的转换同样适用于引用类型--(面向对象,向上造型,向下造型)
- 溢出:一个数据类型的的最大值和最小值循环 溢出后再次排列
- 1.自动数据类型转换
- 基本类型的字面值
- 整数类型的字面值类型是int类型
- 浮点数类型的字面值类型是double类型
- byte,short,char三种比int小的整数可以用范围内的值直接赋值
- 字面值后缀L D F
- long double float
- 进制前缀
- 0b - 标识这是2进制 ,如:0b0101
- 0 - 标识这是8进制, 8进制是三位,如: 023
- 0x - 标识这是16进制,如: 0x0001
- 运算规则
- 计算结果的数据类型,与最大数据类型一致
- byte,short,char三种比int小的整数,运算时会先自动转换成int
- 整数运算溢出 转到最大时,再转会回到最小
- 浮点数运算不精确
- 浮点数的特殊值
- Infinity 无穷
- NaN not a number
- ASCII编码表
-
- 97------->a
-
- 基本数据类型
- 常量与变量
- 当声明一个变量时,必须要指定变量的变量的类型一旦被声明,则不可改变,只能将变量的值转换成其他数据类型,赋值给新的变量数据类型
- 变量名不能重复
- 当声明一个变量时,必须要指定变量的变量的类型一旦被声明,则不可改变,只能将变量的值转换成其他数据类型,赋值给新的变量数据类型
- 运算符和表达式
- 算术运算符
- 基本算术运算符:+ - * / %
- X++ 后缀运算X=x+1
- 如果是字符串String,拼接 - 如果是先运算成功,正常运算再拼接(遇到字符串之后都是拼接)
- 如果第一个是字符串后面的都是拼接。
-
- 如果第一个是字符串后面的都是拼接。
- 整数/整数 = 整数 如果有小数点 舍弃
- 基本算术运算符:+ - * / %
- 扩展算数运算符:++ --
- 赋值运算符
- 基本赋值运算符
- 格式: 变量名 = 值;
- 注意:= 基本赋值运算符,没有比较的含义。
- 优先级最低,先执行等号右边的所有运算,再将结果赋值给等号左边的变量。
- 格式: 变量名 = 值;
- 扩展赋值运算符
- += -= *= /= %=
- 变量 += 值或者是变量。i+=10; 等同于i = i+10;
- += -= *= /= %=
- 基本赋值运算符
- 关系运算符
- 包含:>大于 <小于 >=大于等于 <=小于等于 ==等于 !=不等于
- 1.结果一定是boolean,要么true 要么false。
- 2.不支持比较运算符连用(6<7<8<9)
- 3.不同类型的值,比较是不相等的。
- 4.不同类型的浮点数,丢失精度,不建议使用
- 5.同类型的浮点数,进行比较是可以的,而且是提高精度。
- 包含:>大于 <小于 >=大于等于 <=小于等于 ==等于 !=不等于
- 逻辑运算符
-
- 三目运算符
- 格式: 布尔表达式 ? 表达式1 : 表达式2
- 执行流程: 先执行布尔表达式
- true:则执行表达式1
- false:则执行表达式2
- 格式: 布尔表达式 ? 表达式1 : 表达式2
- Scanner scan = new Scanner(System.in);
- 运算符优先级表
- [ ] ( ) ++ -- ! ~ instanceof * / % + - << >> >>> <> < = > \ == != &^& & || ? := op=
- 算术运算符
- 命令文件
- javac.exe是编译功能javaCompiler
- java.exe是执行程序,用于执行编译好的.class文件
- javadoc.exe用来制作java文档
- jdb.exe是java的调试器
- javaprof.exe是剖析工具
- 编写逻辑
- * 获取数据
- * 处理数据
- 先结构 再细节
- * 输出数据
- 概念
- Jdk的安装
- 检查是否安装过jdk
- win+r => cmd => java -version
- 准备安装包
- 安装JDK
- 双击安装包
- 更改安装路径
- A:默认安装在C盘,c盘系统盘,不建议将自己的软件安装在C盘。
- B:软件资源不好管理
- 注意
- 路径中不要出现空格、中文、关键字
- JRE 可以不安装
- 安装后在安装目录下就可以使用了
- 环境变量(二选一)
- 用户变量
- 此电脑=》右击属性=》高级系统设置=》环境变量=》
- 用户变量:只对当前用户生效,初期学习建议使用用户变量
- 系统变量:对所有用户生效
- 在用户变量点新建=》变量名(JAVA_HOME)=>变量值(D:\ProgramFiles\Java\jdk1.8.0_45)
- Path=>编辑=>新建=>%JAVA_HOME%\bin
- %%引入JAVA_HOME变量名下的变量值
- 当我们在命令行输入一些命令时,事实上是在运行计算机的某一个小程序,当你输入一个程序名之后,计算机会尝试在一些指定的路径中查找是否有该名字的程序,如有,则运行该程序,如找不到,则报错。 我们可以通过配置环境变量的方式,通知计算机去哪些目录下查找目标程序。方式是配置一个叫做Path的变量,它的值就是所需要的查找的路径 %JAVA_HOME%\bin
- 此电脑=》右击属性=》高级系统设置=》环境变量=》
- 系统变量
-
- 用户变量
-
- cmd中,执行java命令与javac命令的区别:
- javac:是编译命令,将java源文件编译成.class字节码文件。
- 例如:javac hello.java
- 将生成hello.class文件。
- java:是运行字节码文件;由java虚拟机对字节码进行解释和运行。
- 例如:java hello
- win10系统中环境变量path变成一行显示(配置环境)
- path只有一行显示,系统自带的path删掉了
-
- 在path前面添加了一句变好了
- C:\Windows\System32;
- path只有一行显示,系统自带的path删掉了
- 不同版本JDK冲突
-
- Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
- has value '1.7', but '1.8' is required.
- Error: could not find java.dll
- Error: could not find Java 2 Runtime Environment.
- 解决方法:
- 1、修改注册表
- 打开注册表regedit HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft
- 分别修改Java Development kit及Java Runtime Environment中的CurrentVersion值为1.8
- 2、替换文件
- 将%JAVA7_HOME%\bin里的 java.exe javaw.exe javaws.exe 复制到 C:\Windows/System32 及 C:\Windows\SysWOW64 并替换原有文件,将上述三个文件的快捷方式复制到 C:\ProgramData\Oracle\Java\javapath 并替换原有文件
- 3、执行java -version进行验证
- 1、修改注册表
-
- 检查是否安装过jdk
- Java基本语句/流程控制
- 分支语句/条件语句
- 单分支结构
- if (判断条件) { 代码 }
-
- if (判断条件) { 代码 }
- 多分支结构
- if ( 判断条件) {满足条件 执行代码1} else {不满足条件 执行代码2 }
- 嵌套分支结构
- if( ){ }else if( ){ }else if( ){ }else{ }
- 单分支结构
- 选择结构
- switch结构
- 注意
- * 变量a的类型支持 byte short char int String
- * 执行顺序:a与后面每个case后的值作比较,如果相等就会执行当前case后的操作,如果不加break,会向后穿透所有case,包括default
- * 如果设置了default“保底选项”,并且没有任何case匹配到的话,就执行default
- * 变量的类型必须与value的类型一致
- break和continu
- break: 直接结束当前循环,跳出循环体,简单粗暴
- break的作用是跳出当前循环块(for、while、do while)或程序块(switch)。在循环块中的作用是跳出当前正在循环的循环体。在程序块中的作用是中断和下一个case条件的比较。
- continue: 跳出本轮循环,继续下一轮循环
- continue用于结束循环体中其后语句的执行,并跳回循环程序块的开头执行下一次循环,而不是立刻循环体。
- break: 直接结束当前循环,跳出循环体,简单粗暴
-
- switch结构
- Debug
- 目标代码行号前双击添加断点
- 启动断点调试
- 启动后会提示是否”确认试图切换“,选择switch
-
- 启动后会提示是否”确认试图切换“,选择switch
- 我们可以按F6让程序继续执行下一步 变量变化的窗口Variables--可以查看变量值的变化情况
- 控制台--可以查看输出的情况
- 循环结构
- for形式
- 循环
- 从哪儿开始
- 到哪儿结束
- 如何变化
- 嵌套for形式
-
- 普通for循环和高效for循环
- 普通FOR
- 好处 可以控制循环步长
- 高效FOR
- 如果只是单纯的从头到尾的遍历,使用增强for循环
- 好处:比普通的for循环写法简便,而且效率高
- 坏处:没有办法按照下标来操作值,只能从头到尾依次遍历
- 如果只是单纯的从头到尾的遍历,使用增强for循环
- 普通FOR
-
- while
-
- do-while
-
- 注意 分号;
-
- 三种循环的区别
- for:知道循环次数
- while/do while:当循环次数不确定时
- while:先判断,不符合规则,不执行代码
- do while:代码最少被执行一次,再去判断,符合规则,再次执行代码
- for形式
- 分支语句/条件语句
- 方法与变量
- 变量
- 局部变量(字段)
- 定义在方法里 必须初始化
- 在方法里/局部代码块中
- 定义在方法里 必须初始化
- 成员变量
- 定义在类里 方法外 不用初始化,自动赋予
- 整个类中都生效
- 定义在类里 方法外 不用初始化,自动赋予
- 默认值
- 引用类型默认值为null
- 基本数据类型
- static byte a;
- 0
- static short b;
- 0
- static int c;
- 0
- static long d;
- 0
- static float e;
- 0.0
- static double f;
- 0.0
- static char g;
- 字符型 默认 '/u0000'
- static boolean h;
- false
- static byte a;
- 局部变量(字段)
- 方法
- 方法定义的格式
-
- 方法的格式:修饰符 返回值类型 方法名(参数列表){方法体}
- 返回值类型不为空的话 需要return返回值
- 返回值类型(int)必须和返回的值的类型(return x)一致
- 方法的格式:修饰符 返回值类型 方法名(参数列表){方法体}
-
- 方法调用顺序图
-
- 调用方法的格式:方法名+参数列表
-
- 方法的重载
- 在一个类中定义多个同名的方法,在一个类中定义多个同名的方法,但是每个方法的参数列表不同(也就是指参数的个数和类型不同),程序在调用方法时,可以通过传递给他们的不同个数和类型的参数来决定具体调用哪个方法.
- 同一个类中,多个方法名相同,参数个数不同,一定构成重载
- 同一个类中,多个方法名相同,参数个数相同:看看对应参数位置上的参数类型 如果相同不重载 如果不同构成重载
- 在同一个类中,存在多个方法名相同,参数列表不同的方法在在
- 在一个类中定义多个同名的方法,在一个类中定义多个同名的方法,但是每个方法的参数列表不同(也就是指参数的个数和类型不同),程序在调用方法时,可以通过传递给他们的不同个数和类型的参数来决定具体调用哪个方法.
- 方法定义的格式
- break与continue
- break: 直接结束当前循环,跳出循环体,简单粗暴
- continue: 跳出本轮循环,继续下一轮循环
- * 不论是break continue 后面都不要直接添加语句 不会执行的
- * 不论加不加continue,都可以在输不对的情况下,继续输入。加了continue之后效率更高
- Random
- int a=new Random().nextInt(100); //此时随机数的范围为[0,100)
- 变量
- Java是编译型还是解释型语言
- 编译型语言和解释型语言
- 编译型语言
- 定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。
- 优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高,可以脱离语言环境独立运行。
- 缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。
- 总结:执行速度快、效率高;依靠编译器、跨平台性差些。
- 代表语言:C、C++、Pascal、Object-C以及Swift。
- 定义:在程序运行之前,通过编译器将源程序编译成机器码(可运行的二进制代码),以后执行这个程序时,就不用再进行编译了。
- 解释型语言
- 定义:解释型语言的源代码不是直接翻译成机器码,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。
- 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。
- 缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。
- 总结:执行速度慢、效率低;依靠解释器、跨平台性好。
- 代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby。
- 定义:解释型语言的源代码不是直接翻译成机器码,而是先翻译成中间代码,再由解释器对中间代码进行解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。
- 混合型语言
- 定义:既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕,就出现了半编译,半解释型语言。
- 比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.NET在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。严格来说混合型语言属于解释型语言,C#更接近编译型语言。
- Java即是编译型的,也是解释型语言,总的来说Java更接近解释型语言。
- 可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。同时围绕JVM的效率问题,会涉及一些如JIT、AOT等优化技术,例如JIT技术,会将热点代码编译成机器码。而AOT技术,是在运行前,通过工具直接将字节码转换为机器码。
- 可以说它是解释型的。因为Java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释运行的。
- 定义:既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕,就出现了半编译,半解释型语言。
- 编译型语言
- 动态类型语言和静态类型语言
- 动态类型语言
- 动态类型语言:在运行期间才去做数据类型检查的语言,说的是数据类型。动态类型语言的数据类型不是在编译阶段决定的,而是把类型绑定延后到了运行阶段。
- 代表语言:Python、Ruby、Erlang、JavaScript、Swift、PHP、Perl。
- 静态类型语言
- 静态类型语言的数据类型是在编译期间(或运行之前)确定的,编写代码的时候要明确确定变量的数据类型。
- 代表语言:C、C++、C#、Java、Object-C。
- 动态类型语言
- 动态语言和静态语言
- 动态语言
- 动态类型语言和动态语言是完全不同的两个概念。
- 动态语言:说的是运行时改变结构,说的是代码结构。在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
- 代表语言:Object-C、C#、JavaScript、PHP、Python、Erlang。
- 静态语言
- 与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++。
- 动态语言
- 编译型语言和解释型语言
- java进制
- 定义
- 人为定义的带进位的计数方法
- 常用进制类型
- 二进制
- 计算机底层都是使用二进制进行存储以及运算
- 0b****;(以0b或者0B开始,*表示0或1)比如:010101
- 原码、反码、补码
- 原码
- 原码:将一个整数转换成二进制表示以 int 类型为例,int类型占4个字节、共32位。
- 例如:
- 2 的原码为:00000000 00000000 00000000 00000010
- -2的原码为:10000000 00000000 00000000 00000010
- 例如:
- 原码:将一个整数转换成二进制表示以 int 类型为例,int类型占4个字节、共32位。
- 反码
- 反码:正数的反码:与原码相同
- 负数的反码:原码的符号位不变,其他位取反
- 例如,-2 的反码为:11111111 11111111 11111111 11111101
- 负数的反码:原码的符号位不变,其他位取反
- 反码:正数的反码:与原码相同
- 补码
- 补码 正数的补码:与原码相同
- 负数的补码:反码+1
- 例如,-2 的补码为:01111111 11111111 11111111 11111110
- 负数的补码:反码+1
- 补码 正数的补码:与原码相同
- 注意事项
- 二进制的最高位是符号位(“0”代表正数,“1”代表负数);
- Java中没有无符号数;
- 计算机以整数的补码进行运算;
- 原码
- 八进制
- 0****;(以数字0开始,*表示0到7任意数字 比如:012345)
- 十六进制
- 0x****;(以0x或者0X开始,*表示0~9或者a~f组成 比如:0x12c)
- 二进制
- 定义