Java笔记:二进制与Java中的基本数据类型

简介: Java笔记:二进制与Java中的基本数据类型

二进制与Java中的基本数据类型

简介

二进制 0 1

逢二进一


二进制优点:


技术容易实现:高电压1,低电压0

传输可靠性高

适合逻辑运算:真1,假0

运算规则简单

二进制的缺点:


表示数时位数太多

可读性差,难于记忆

存储空间占用多

逻辑只能表示是或否

课程内容

二进制基础:


计算规则

进制转换

数据的存储


整型

浮点型

字符型

布尔型

位值制计数法

数码:使用的数字符号

基数:每个进制的基数

位权:固定位置对应的单位值

例如


十进制:
数码:0、1、2、3、4、5、6、7、8、9
基数:10
位权:个、十、百、千、万...
二进制:
数码:0、1
基数:2
位权:从右往左:2^0、2^1、2^2...

二进制转化为十进制

转换规则:展开位权进行求和运算


100 => 
1*2^2 + 0*2^1 + 0*2^0 = 4

十进制转化为二进制

整数转换规则:除2取余直至运算结果为0,将余数倒序排列


十进制转二进制
29/2=14  # 1
14/2=7   # 0
7/2=3    # 1
3/2=1    # 1
1/2=0    # 1
29 => 11101
二进制转十进制
11101
= 1 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0
= 16 + 8 + 4 + 1
=29

小数转换规则: 小数部分乘以2,直至小数点后为0,取整数部分正序排列


十进制转二进制
0.125 * 2 = 0.250 # 0
0.25 * 2 = 0.50   # 0
0.5 * 2 = 1.0     # 1
0.125 => 0.001
二进制转十进制
0.001
= 0 * 2^(-1) + 0 * 2^(-2) + 1 * 2^(-3)
= 2^(-3)
= 1/8
= 0.125

十进制转二进制无限循环特列

0.85 * 2 = 1.7
0.7 * 2 = 1.4
0.4 * 2 = 0.8
0.8 * 2 = 1.6
0.6 * 2 = 1.2
0.2 * 2 = 0.4
0.4 * 2 = 0.8
...

Java中的进制

八进制 0-7 八进制1位对二进制3位

十六进制 0-9 A-E 十六进制1位对二进制4位


JDK:

0b 0B 0x 0X 前缀是0,字母不区分大小写

底层存储都是二进制

输出都是十进制形式

二进制 int bin = 0b1100;
八进制 int otc = 0142;
十进制 int dec = 98;
十六进制 int hex = 0x142;

进制转换的方法

// 十进制转其他进制
Integer.toBinaryString()
Integer.toOctalString()
Integer.toHexString()
// 自定义进制
Integer.toString(int i, int radix)
// 其他进制转十进制
int Integer.parseInt(String s, int radix)
Integer Integer.valueOf(String s, int radix)

代码示例


package com.demo.number;
public class NumberConvert {
    public static void main(String[] args) {
        int bin = 0b1100;
        int oct = 014;
        int dec = 12;
        int hex = 0xC;
        //输出都是十进制形式
        System.out.println(bin); // 12
        System.out.println(oct); // 12
        System.out.println(dec); // 12
        System.out.println(hex); // 12
        // 自定义输出进制形式
        System.out.println(Integer.toBinaryString(bin)); // 1100
        System.out.println(Integer.toOctalString(oct)); // 14
        System.out.println(Integer.toHexString(hex)); // c
        System.out.println(Integer.toString(dec, 10)); // 12
        // 其他进制转十进制
        System.out.println(Integer.parseInt("1100", 2)); // 12
        System.out.println(Integer.valueOf("1100", 2)); // 12
    }
}

位运算

位运算:直接对整数在内存中的二进制位进行操作


比特bit 信息量的最小单位,单位是b

字节byte 表示信息的最小单位,单位是B


1 byte = 8 bit

机器数

符号数字化 0为正,1为负

数的大小受机器字长限制


机器数的形式:原码、反码、补码


补码计算方式


正数:补码=反码=原码
负数:补码=反码+1

例如

负数相加
(-1) + (-5)
原码= 1000 0001 + 1000 0101
反码= 1111 1110 + 1111 1010
补码= 1111 1111 + 1111 1011
  1111 1111
+ 1111 1011
-----------
 11111 1010
舍弃溢出位
补码=1111 1010
反码=1000 0101
原码=1000 0110
= -6
正负相加
+1 + (-1)
原码=0000 0001 + 1000 0001
反码=0000 0001 + 1111 1110
补码=0000 0001 + 1111 1111
  0000 0001 
+ 1111 1111
------------
 10000 0000
补码=0000 0000
反码=0000 0000
原码=0000 0000
=0

位运算

image.png


image.png

Java中的整数类型

整数类型使用补码存储

image.png


image.png

多字节数据的大端模式与小端模式


大端:高位字节放在低地址,低位字节放在高地址(默认)

小端:低位字节放在低地址,高位字节放在高地址


大数类BigInteger


可以存储理论无限大的整数


BigInteger(String val) 十进制字符串转BigInteger
BigInteger(String val, int radix) 指定进制字符串转BigInteger
BigInteger.valueOf(long val) 指定long转BigInteger

代码实例


package com.demo.number;
import java.math.BigInteger;
public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger dec = new BigInteger("10");
        BigInteger bin = new BigInteger("1010", 2);
        BigInteger lon = BigInteger.valueOf(10L);
        System.out.println(dec); // 10
        System.out.println(bin.toString(2)); // 1010
        System.out.println(lon); // 10
        // 执行加法运算
        System.out.println(dec.add(bin));
    }
}

小数的二进制化

定点数与浮点数

指数规则:任意实数,都可以由一个定点数x基数的整数次幂得到

定点数部分:尾数,指数部分:阶码


逻辑上采用(符号位S,阶码E,尾数M)来表示一个数


IEEE754二进制浮点数标准


单精度float(4字节)1个符号位+8位阶码+23位尾数

双精度double(8字节)1个符号位+11位阶码+52位尾数


规约形式:科学计数表示法下,小数最高有效位是1(整数部分)

尾数M的表示范围:0<=M<1

规约形式实值 = 1 + M


浮点数的阶码通常用移码表示

移码:将数值正向偏移(2^(e-1)),等于符号位取反的补码

阶码:用移码(标准移码-1)记录指数,实际偏移值为(2^(e-1) - 1)


格式化的浮点数

实际值计算规则


float32位
 1 01111110 01000000000000000000000
= (-1)^S * (1+M) * 2^(E-127)
= -1 * (0.01 + 1) * 2^(126-127) 
= -1 * 1.25 * 2^(-1)
= -0.625

特殊值

无穷大,正负0 NaN


精确小数BigDecimal

BigDecimal(String val)
BigDecimal(Double val) // 不推荐

代码示例


package com.demo.number;
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
public class BigDecimalDemo {
    public static void main(String[] args) {
        BigDecimal b1 = new BigDecimal("0.01");
        BigDecimal b2 = new BigDecimal(0.01D); // 不推荐
        System.out.println(b1); // 0.01
        System.out.println(b2);
        // 0.01000000000000000020816681711721685132943093776702880859375
        // 计算
        BigDecimal b3 = new BigDecimal("0.1");
        BigDecimal b4 = new BigDecimal("0.3");
        System.out.println(b4.divide(b3)); // 3
        // 遇到除不尽的情况需要设置保留精度和进位方式:四舍五入
        System.out.println(b3.divide(b4, new MathContext(5, RoundingMode.HALF_UP)));
        // 0.33333
    }
}

字符型和布尔型

字符集:字库表,编码字符集,字符编码


字库表:a、b、c…

编码字符集(码点):97、98、99…

字符编码(码元):0110 0001、0110 0010、0110 0011…


ASCII编码 128种字符信息

Unicode字符集(万国码)只有字库表和编码字符集,没有规定字符编码

字符编码:UTF-4、UTF-8、UTF-16、UTF-32


char(2字节)

使用Unicode字符集UTF-16

只能表示Unicode字符集编号65536以内的字符

大写A-Z 65-90

小写a-z 97-122

数字0-9 48-57


boolean(4个字节)

存储空间和执行效率上做取舍

处理器大多数是32位


知识回顾

二进制

位值制计数法,八进制与十六进制

进制之间转换(十进制转二进制大多是无限循环)

二进制特殊运算方式:位运算


image.png

相关文章
|
6月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
89 13
|
2月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
111 0
|
6月前
|
Java C语言 C++
课时9:Java数据类型划分(数据类型划分)
课时9介绍了Java的数据类型划分及其操作。Java数据类型分为基本数据类型和引用数据类型。基本数据类型包括八种:数值型(整形、浮点型)、字符型和布尔型;引用数据类型有数组、类和接口。重点讲解了每种数据类型的默认值、适用场景及选择原则,如整数用int,小数用double,日期时间用Long等。掌握这些内容对编程至关重要。
114 4
课时9:Java数据类型划分(数据类型划分)
|
6月前
|
Java
课时12:Java数据类型划分(字符型)
课时12介绍了Java中的字符型数据(char),包括字符的定义、与int类型的转换及应用。通过范例展示了如何观察字符、编码转换、大小写字母互转、保存中文字符,以及Java中字符处理的灵活性。字符型使用单引号声明,可与int互相转换,支持Unicode编码,能表示任何文字,包括中文。虽然实际开发中直接操作字符型的情况不多,但理解其特性有助于更好地编程。
105 17
|
6月前
|
存储 传感器 缓存
java变量与数据类型:整型、浮点型与字符类型
### Java数据类型全景表简介 本文详细介绍了Java的基本数据类型和引用数据类型,涵盖每种类型的存储空间、默认值、取值范围及使用场景。特别强调了`byte`、`int`、`long`、`float`、`double`等基本类型在不同应用场景中的选择与优化,如文件流处理、金融计算等。引用数据类型部分则解析了`String`、数组、类对象、接口和枚举的内存分配机制。
169 15
|
6月前
|
Java
课时14:Java数据类型划分(初见String类)
课时14介绍Java数据类型,重点初见String类。通过三个范例讲解:观察String型变量、&quot;+&quot;操作符的使用问题及转义字符的应用。String不是基本数据类型而是引用类型,但使用方式类似基本类型。课程涵盖字符串连接、数学运算与字符串混合使用时的注意事项以及常用转义字符的用法。
142 9
|
6月前
|
Java
课时13:Java数据类型划分(布尔型)
观察布尔型的操作。布尔是一位数学家的名字,这个布尔发明了两个单词:True、False(一个表示真一个表示假)。一般布尔类型都只表示逻辑的计算结果。
150 9
|
5月前
|
存储 缓存 Java
理解Java引用数据类型:它们都是对象引用
本文深入探讨了Java中引用数据类型的本质及其相关特性。引用变量存储的是对象的内存地址而非对象本身,类似房子的地址而非房子本身。文章通过实例解析了引用赋值、比较(`==`与`equals()`的区别)以及包装类缓存机制等核心概念。此外,还介绍了Java引用类型的家族,包括类、接口、数组和枚举。理解这些内容有助于开发者避免常见错误,提升对Java内存模型的掌握,为高效编程奠定基础。
232 0
|
6月前
|
Java
课时11:Java数据类型划分(浮点类型)
课时11介绍了Java中的浮点数据类型。主要内容包括:1. 定义小数,默认使用Double类型;2. 定义Float变量,需在数值后加&quot;F&quot;或&quot;f&quot;进行强制转换;3. 观察不同类型计算结果,如Int型除法会丢失精度,需至少包含一个Double或Float类型以确保准确性。总结指出,在复杂计算中推荐使用Double类型以避免精度损失。
131 5
|
6月前
|
Java
课时10:Java数据类型划分(整型类型)
本文主要围绕Java中整型数据展开,详细讲解整型变量、常量的概念,整型数据运算规则,包括数据溢出问题及解决方法,数据类型转换(自动转换与强制转换)的原理和注意事项,同时介绍了整型数据默认值的相关知识,以及byte数据类型与int数据类型的关系和使用场景,帮助读者全面掌握Java整型数据的相关内容。
165 4