热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

零、前言

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

1.引子

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

9414344-139687f13f941c8b.png
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负

9414344-9d32d545d966b299.png
二进制的正负.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 的有效数字,称为`尾数`:反映数的精度

9414344-ec3f8c401ab4fc22.png
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(二进制)

9414344-f813db2e19587c86.png
float.png
8.double:双精度浮点型

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


类型字节数位数范围初始值
byte18-2^7 ~ 2^7-1 (-128 ~ 127)0
short216-2^15 ~ 2^15-1 (-32768~32717)0
int432-2^31 ~ 2^31-1 (-2147483648~2147483647)0
long864-2^63 ~ 2^63-10L
boolean18true/falsefalse
char2160 ~ 2^16-1(0 ~ 65535)null
float432-3.4 * 10^-38 ~ 3 .4 * 10^380.0f
double864-1.7 * 10^-308 ~ 1.7 * 10^3080.0d


推荐阅读
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • ejava,刘聪dejava
    本文目录一览:1、什么是Java?2、java ... [详细]
  • 流数据流和IO流的使用及应用
    本文介绍了流数据流和IO流的基本概念和用法,包括输入流、输出流、字节流、字符流、缓冲区等。同时还介绍了异常处理和常用的流类,如FileReader、FileWriter、FileInputStream、FileOutputStream、OutputStreamWriter、InputStreamReader、BufferedReader、BufferedWriter等。此外,还介绍了系统流和标准流的使用。 ... [详细]
  • 查找给定字符串的所有不同回文子字符串原文:https://www ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有