1.计算机编程通之字节与数据类型

零、前言

从你打开计算机的那一刻,从你开启一个手机游戏;从你观看一部电影,你都在使用字节。 可以说它们无处不在,而你又对它有多少了解呢?

1.引子
一个视频,如果用记事本打开,你会发现是一堆乱码,但你用播放器就能够播放。
当你随便改动几个字后,就会发现视频播放不了了,改回去,一切恢复正常。

1.png

可以看到6.79 MB大小的视频竟然是由这么多字组成的。
视频是由字节组成的。6.79 MB有7129600 字节

字节的进制转化:
1 B = 8 bit       1 KB = 1024 B = 8192 bit
1 MB = 1024 KB    1 GB = 1024 MB    1TB = 1024 GB
2.什么是字节呢?
字节是计算机的存储单位,我们都知道计算机只能识别二进制的数,一个字节可以储存8个二进制数(比如01010011),
也就是说这个视频的本质是7129600*8的0或1的组合排列而成,可想而在是多么复杂。
管他多复杂,我们又看不懂二进制,但计算机很喜欢读它们,计算机懂,但是我们不懂怎么办?
于是聪明的人类将二进制的数和字符对应起来,成为编码,让计算机读出来二进制,转化成我们认识的字符。
编码格式就是码表,比如ASCII码,UTF-8,GBK等
3.为什么是乱码呢?
回到为什么是乱码这个问题,记事本所展现出来是:
通过查系统默认的编码表将二进制数映射出来,就是我们看到的东西。视频的二进制数是按照视频的规则排序的,
所以记事本强行翻译得到了一堆乱码。视频播放器的解码器识别视频的二进制数,从而可以让视屏播放。
4.小结
所以无论是你录个像,还是拍个照,还是打开浏览器,写篇小说,玩个游戏,都是很多的0和1在互相影响,互相作用。
就像现实世界,无论是人、桌子、小狗、或者计算机、太阳、宇宙都是由分子构成,他们互相影响,相互作用产生了这个绚丽的宇宙。
下面就来进入到程序的世界,感受另一个"宇宙"

一、在Java中一共有八种数据类型:

byte 字节、short 短整型、int 整型、long 长整型、 float 浮点型、char 字符型 、boolean 布尔类型

1.byte : 字节

8位、有符号的,以二进制补码表示的整数

byte a = 17;
byte b = -5;
System.out.println(a + b);//12
关于二进制数的符号:
每个自然数都与二进制一一对应,那么负数怎么办?
对于二进制数的正负,将最高位作为符号位,0正,1负

二进制的正负.png

2.short:短整型

与byte的唯一区别就是占2个字节,也就是由16个二进制数组成

short a = 17;
short b = -5;
System.out.println(a + b);//12
3.int: 整型

与byte的唯一区别就是占4个字节,也就是由32个二进制数组成

int a = 17;
int b = -5;
System.out.println(a + b);//12
4.long: 长整型

与byte的唯一区别就是占8个字节,也就是由64个二进制数组成

long a = 17L;
long b = -5L;
System.out.println(a + b);//12
5.char:字符型

一个单一的 16 位 Unicode 字符;虽然用整数表示,但可以储存任何字符

char x = 97; 
char x = 'c'; //两者是等效的
char ch = 'p';//char还可以强转成int
System.out.println((int) ch);//112
6.boolean:布尔型

初始值false,范围[true、false]

boolean isOk = false;
System.out.println(!isOk);//!操作取反
7.float:浮点型

二进制中数字的正负可以用最高位作为符号位来表示,那么小数呢?

计算机中,一个数N的浮点形式可以用:
N = M*2^E
E 表示 2 的幂,称为`阶码`,确定N的小数点位置:反映浮点数的范围  
M 表示 N 的有效数字,称为`尾数`:反映数的精度

float.png

拿7.25举例:
7.25 = 7 + 0.25 = 1*2^2 + 1*2^1 + 1*2^0 +  0*2^-1 + 1*2^-2   111.01(二进制)=1.1101*2^2(二进制)

float.png

8.double:双精度浮点型

与float相似,只是占8个字节,共64bit,符号位:1bit,阶码:11bit,尾数:52bit


类型

字节数

位数

范围

初始值

byte

1

8

-2^7 ~ 2^7-1 (-128 ~ 127)

0

short

2

16

-2^15 ~ 2^15-1 (-32768~32717)

0

int

4

32

-2^31 ~ 2^31-1 (-2147483648~2147483647)

0

long

8

64

-2^63 ~ 2^63-1

0L

boolean

1

8

true/false

false

char

2

16

0 ~ 2^16-1(0 ~ 65535)

null

float

4

32

-3.4 * 10^-38 ~ 3 .4 * 10^38

0.0f

double

8

64

-1.7 * 10^-308 ~ 1.7 * 10^308

0.0d

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏racaljk

什么是副作用(Side Effect)

副作用(Side Effect)是指函数或者表达式的行为依赖于外部世界。具体可参照Wiki上的定义,副作用是指

1367
来自专栏后端技术探索

常见算法面试题

这几天在网上看到一篇关于算法面试题的博客,归纳的很好,有不少经典的题目,大部分来自《编程珠玑》、《编程之美》、《代码之美》三本书。这里给出书上的解答以及一些思考...

2812
来自专栏华章科技

值得收藏的Python小技巧:这17个骚操作你都OK吗?

导读:Python 是一门非常优美的语言,其简洁易用令人不得不感概人生苦短。在本文中,作者 Gautham Santhosh 带我们回顾了 17 个非常有用的 ...

3033
来自专栏C语言C++游戏编程

因为有你,所以出彩!C语言编程中不可或缺的条件判断和循环

在编程语言中,判断和循环可以说是最重要的之一,正因为实现了它们的功能,才能够有如今各种各样功能的程序。今天小编带大家来了解一些条件判断和循环的知识。

1373
来自专栏java一日一条

Java面试题:多继承

招聘和面试对开发经理来说是一个无尽头的工作,虽然有时你可以从HR这边获得一些帮助,但是最后还是得由你来拍板,或者就像另一篇文章“Java 面试题:写一个字符串的...

1614
来自专栏编程微刊

2018年各大互联网前端面试题二(滴滴打车)

3952
来自专栏Albert陈凯

理解Scala的函数式风格:从var到val的转变

Scala允许你用指令式风格编程,但是鼓励你采用一种更函数式的风格。如果你是从指令式的背景转到Scala来的——例如,如果你是Java程序员——那么学习Scal...

2333
来自专栏Java架构沉思录

聊聊设计模式之工厂方法模式

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

1113
来自专栏程序员互动联盟

C语言最难啃的三块硬骨头

提到C语言很多初学者都觉得,学到中间就进行不下去了,因为碰到了几个硬骨头死活翻不过去,于是很多人给C语言下结论太难了,太靠近底层了,特别是那几块难啃的骨头,直接...

4145
来自专栏斑斓

从map函数引发的讨论

只要你用心,一个细小问题可以引起对一系列设计原则的思考与回味。软件设计与开发技能就是这样通过不停“反刍”与思索而磨砺出来的。当然,对一些实践案例进行升华,进而抛...

3769

扫码关注云+社区

领取腾讯云代金券