当前位置: 首页 > article >正文

Java基础(2)

博客:深入理解浮点型数据、计算机视觉信息存储与类型转换

四、浮点型数据

在编程语言中,浮点型数据主要包括float(单精度)和double(双精度)。计算机默认使用double类型存储小数,这会引发一些特殊的问题。

1. 小数转化为二进制数

小数转化为二进制数的方法是乘二取整(从下往上读)。例如,0.2在二进制中是一个无限循环数,转换过程如下:

0.2 * 2 = 0.4 -> 0 0.4 * 2 = 0.8 -> 0 0.8 * 2 = 1.6 -> 1 0.6 * 2 = 1.2 -> 1 ...

转换结果为0.001100110011...,可以看到它是一个无限循环数。

2. 精度丢失问题

原因:由于计算机存储小数默认用double类型,而double类型的大小是固定的,对于一些无限循环小数无法完全精确存储,导致精度丢失。例如:

public static void main(String[] args){
   System.out.println(1.2 -1);
   
}

输出结果为0.19999999999999996,并不是我们期望的0.2。

解决办法:可以使用BigDecimal类来处理精度问题:

public static void main(String[] args){
    BigDecimal b1=new BigDecimal(Double.toString(1.2));
    BigDecimal b2=new BigDecimal(Double.toString(1));
    Double value =b1.subtract(b2).doubleValue();
    System.out.println(value);
}

五、计算机显示器数据的存储方案

计算机存储信息分为两种方式:视觉信息(颜色、亮度、坐标)和听觉信息(音色、振幅、时间间隔)。

1. 视觉信息存储方式与问题

像素点:

显示器通过像素点显示图像,每个像素点由红、绿、蓝三原色构成,每个颜色的值范围为0~255。每个像素点需要3个字节(3Byte,24bit)。

坐标:

除了存储像素点的颜色值,计算机还需要记录像素点的坐标信息(x轴和y轴),每个坐标用两个short类型表示,总共4字节(32bit)。

存储问题:

单个像素点需要7字节(56bit)存储空间,对于高分辨率显示器,如2^16 x 2^16,存储数据量将非常庞大。

2. 减少视觉信息存储数据量的解决方案

字符集:

字符集通过映射的方式减少存储空间。例如,一个字符的像素点信息可能需要11200bit,但使用ASCII码映射后仅需8bit。

示例:

假设一个简单的映射表,存储三个字符abc只需24bit,而原始方式需要33600bit。

乱码问题:

当发送方和接收方使用不同字符集时,可能会导致乱码。例如:

原始数据:1010(高四位) 发送方:使用字符集A 接收方:使用字符集B

由于字符集不同,接收方可能无法正确解码数据,导致乱码现象。

六、char类型

1. char类型的基本概念

字符类型实际上是一个16位无符号整数,这个数对应字符的编码。Java中的字符类型采用Unicode字符集编码。Unicode是世界通用的定字长字符集,所用字符都是16位。

2. 示例代码
public static void main(String[] args) {
        char c1 = '中';
        char c2 = '\u4e2d';
        System.out.println(c1);
        System.out.println(c2);
    }

注释:4e2d为中所对应的16位Unicode编码。

3. 字符与整数的转换

任何一个字符都可以转化为一个整数,范围是0-65535。

public static void main(String[] args) {
        int  a = '中';
        System.out.println(a);
    }

可以查看某个数对应的字符:

public static void main(String[] args) {
        char c = 69;
        System.out.println(c);//输出E
  }
4. 转义字符

对于不方便输出的字符,可以使用转义字符表示。例如:

public static void main(String[] args) {
        int num = 100;
        String json = "{"+"\"count\":"+num+"}";// /斜杠 \反斜杠
          String dataString = "[{\"id\":\"1\" ,\"name\":\"张三\"},{\"id\":\"2\" ,\"name\":\"李四\"},{\"id\":\"3\" ,\"name\":\"王五\"}]";
        System.out.println(json);//输出{"count":100}
}

七、布尔类型

boolean类型有两个值:false和true,用于判断逻辑条件。数值型和boolean之间不能直接转换。

八、类型转换

1. 自动类型转换

类型范围小的变量可以直接赋值给类型范围大的变量。表达式的运算结果类型由表达式中最高类型决定。在表达式中,byte、short、char会直接转换成int类型进行运算。

例1:

public static void main(String[] args) {
    byte a=127;
    byte b=1;
    System.out.println(a+b);//输出128
}

例2:

public static void main(String[] args) {
    byte a=127;
    int c=a;
    System.out.println(c);//输出127
}
2. 强制类型转换

强制类型转换可能会导致精度丢失问题,因为计算机采用补码存储形式。

例1:

public static void main(String[] args) {
    byte a=127;
    byte b=1;
    int c= (byte) (a+b);
    System.out.println(c);//输出-128
}

例2:

public static void main(String[] args) {
    int a=128;
    int c= (byte) a;
    System.out.println(c);//输出-128
}

通过本文,您可以深入了解浮点型数据、视觉信息存储以及Java中的类型转换,这些都是开发过程中经常遇到的重要概念。希望这些知识能帮助您更好地理解和解决实际开发中的问题。


http://www.kler.cn/a/511912.html

相关文章:

  • RavenMarket:用AI和区块链重塑预测市场
  • C# LINQ(Language Integrated Query)详解
  • Chrome 132 版本新特性
  • 【多线程】线程池
  • 5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署
  • 左神算法基础提升--3
  • 语言模型的价值定位与技术突破:从信息处理到创新认知
  • 20250120 深入了解 Apache Flink 的 Checkpointing
  • Perplexity AI 周六向 TikTok 母公司字节跳动递交了一项提案
  • Linux:SystemV通信
  • 【2024 年度总结】从小白慢慢成长
  • 数据库高可用方案-04-删除策略
  • MySQL和SQL server的区别
  • DATAGerry 终端节点接口敏感信息泄露漏洞复现(CVE-2024–50967)(附脚本)
  • 基于STM32的智能门锁安防系统(开源)
  • React Context 实现全局组件注册
  • 【2024 CSDN博客之星】技术洞察类:从DeepSeek-V3的成功,看MoE混合专家网络对深度学习算法领域的影响(MoE代码级实战)
  • postgresql的用户、数据库和表
  • 内存原理:计算机存储的核心奥秘
  • Python预训练视觉和大语言模型——精彩试读
  • hive表修改字段类型没有级连导致历史分区报错
  • iOS 内购接入StoreKit2 及低与iOS 15 版本StoreKit 1 兼容方案实现
  • 【算法学习笔记】34:扩展欧几里得算法
  • nginx伪静态配置解释和Nginx 常见的配置
  • Unreal Engine 5 C++ Advanced Action RPG 十章笔记
  • Git合并多次提交,改成一个简洁的提交历史