文章目录
- 前言
- 一、进制
- 1 逢几进一
- 2 常见进制在java中的表示
- 3 进制中的转换
- (1)任意进制转十进制
- (2)十进制转其他进制
- 二、计算机中的存储
- 1 计算机的存储规则(文本数据)
- (1)ASCII码表
- (2)编码规则的发展演化
- 2 计算机的存储规则(图片数据)
- (1)分辨率、像素
- (2)黑白图与灰度图
- (3)彩色图
- 3 计算机的存储规则(音频数据)
- 三、原码、反码和补码
- 1 原码
- 2 反码
- 3 补码
- 4 总结一下
- 5 字节范围推广
- 6 数据类型转换中的隐式转换和强制转换一些例子就可以用补码的知识来解释了
- (1)同一个整数在 byte、short、int、long下面补码分别表示什么呢?
- (2)隐式转换
- (3)强制转换
- 总结
前言
本文会介绍:
- java中的各种进制的转换关系
- 计算机中文本、图片、音频三种数据类似是怎么存在计算机中的
- 普及图像、和音频的一些常识知识
计算机数据分为三种: 文本(Text)数据:数字,字母,特殊符号等等、(Image)图片数据、(Sound)声音数据。有且仅有这三种,其中视频是图片和音频数据的组合。
【注】:无论是文本、图片、还是音频计算机都是以二进制存储,即用一堆0,1数字来表示。这是怎么做到的,下面我们简单了解一下,其实这块属于计算机组成原理的知识。
先来了解一下进制吧。
一、进制
1 逢几进一
- 十进制:逢十进一
- 二进制:逢二进一
- 八进制:逢八进一
- 十六进制:逢十六进一
什么意思呢?以十进制逢十进一和二进制的逢二进一来说。
如下图所示:
2 常见进制在java中的表示
- 二进制:由0和1组成,代码中以0b开头
- 十进制:由0-9组成,java默认十进制,前面不加任何前缀
- 八进制:由0-7组成,代码中以0开头
- 十六进制:由0-9还有a-f组成,代码中以0x开头
十六进制里面a-f解释一下:
【0】 | 【1】 | 【2】 | 【3】 | 【4】 | 【5】 | 【6】 | 【7】 | 【8】 | 【9】 | 【a】 | 【b】 | 【c】 | 【d】 | 【e】 | 【f】 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
下面给出java代码例子:
public class HelloWord{public static void main(String[] args){System.out.println(17); // 十进制 17System.out.println(017); // 八进制 15System.out.println(0x123); // 十六进制 291System.out.println(0b123); // 语法错误}}
【注】:代码中写要加前缀,但是用System.out.println()出来的都是转换成十进制打印出来的
3 进制中的转换
(1)任意进制转十进制
公式: 系数 * 基数的权次幂 相加
- 系数: 就是每一位上的数
- 基数:当前进制数
- 权:从右往左,依次为 0 1 2 3 4…
计算过程如下图:
除了上述通用的转换方法,部分进制之间还存在一些快速转换技巧。
二进制转十进制:8421快速转换法:
其实就是查表
(2)十进制转其他进制
除基取余法
不断的除以基数(几进制,基数就是几)得到余数,直到商为0,再将余数倒着拼起来即可。
二、计算机中的存储
1 计算机的存储规则(文本数据)
学了进制过后,相信文本数据中的数数字你已经知道怎么存的了
99直接转成二进制,那字母‘a’呢?— ASCII码表
(1)ASCII码表
问题又来了,字母可以用ASCII码表,但是汉字这个表里面没有啊,怎么办?继续在这张表上面加就是了,然后就不断发展出来了多种编码规则
(2)编码规则的发展演化
-
- GB2312编码:1981年5月1日发布的简体中文汉字编码国家标准。收录7445个图形字符,其中包括6763个汉字。
-
- BIG5编码:台湾地区繁体中文标准字符集,共收录13053个中文字,1984年实施。
-
- GBK编码:2000年3月17日发布,收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
-
- Unicode编码:国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。
【注】:这个过程中还产生了一些其他的编码,如我们常用的utf-8编码等。
总结一下就是,数字—>二