Java 基础扫盲 - 字节、字符、位
历史问题
大家都知道计算机这东西是洋鬼子搞出来的,他的底层实现是二进制。也就是说,计算机里面,二进制,简简单单的0和1可以表示世间万物,可以创造世间万物。
一生二,二生三,三生万物。
不知道创造者是否参考过我大中华博大精深的文化。
位
这里说的位就是指的二进制位了,也就是说的0或者1。他们都可以表示一位。英文名就是bit了。
字节
字节其实就是一个单位,我们通过单位知道文件的大小。这就好比你上菜市场卖肉的时候问店家猪肉多少钱一斤一样,在计算机的世界里面,我们经常会问猪肉多少钱一字节。如果你知道一斤猪肉大体上有多大,够炒几个菜。那么你就大概了解一字节的文件大体上有多大,能装的下几个字儿了! 其实,我们平时接触的比较多的是M,K还有G。是吧? 其实,他们都是计量单位。字节的英文表示为byte(为什么我输入byt的时候,搜狗给我提示的避孕套呢?)。他们之间的转化关系如下:
- 1G=1024M
- 1M=1024K
- 1K=1024byte
好了,大家清楚他们之间的关系了吧?我们平时的流量套餐呢?1G?大概就是1*1024*1024=1048576KB了。假如,我们平时浏览一篇文章用20k,看一张图片用40K,听一首歌用3M,看一部电影用100M。能用多少流量,大家自己算去吧! 那么,字节和位之间存在关系吗? 当然存在,只要在计算机的世界里面出现的任何东西,都和位存在关系! 一个字节等于8位。就是说8个0和1的组合表示一个字节。 00000000 11111111 都可以表示一个字节。
字符
字符简单了!就是我们平时看到的一切字母、符号、中文、法文、日文等等。c是个字符、中也是个字符。 说到字符呢,就不得不说一下编码格式了。这里只说一下比较常用的编码格式,其他的编码格式,大家可以自行百度理解研究。
- ASCII 洋鬼子最早搞出来的编码格式。该编码下,一个字符需要一个字节表示,也就是说占8位。这样的话有256中0和1的组合方式,可以表示256个不同的字母。对于,英文而言就绰绰有余了。
- UNICODE 显然,洋鬼子在设计ASCII码的时候没有考虑到遥远的东方,存在博大精深的文化。新华字典里面的汉字有多少个?显然256是远远不够的!那平方呢?65535?够了吧?还不够? 这里就说到一个网络上经常出现的一个问题,UNICODE编码里面,一个汉字占几位的问题。很多老程序员会这么说:“一个汉字占两个字节!” 在GBK编码里面是2个字节,但是在unicode编码里面是不对的!其实,很多时候,汉字占几个自己完全取决于编码格式。编码格式也不难写,因此对于汉字的编码有多种说法:ubuntu12.04里面一个汉字是三个字节!
它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。
如上,unicode编码的描述。 就是说,在unicode编码下,一个汉字可能是2个字节,也可能是3个或者是4个字节。
- utf8 该编码格式我们是不是经常用到呢? 该编码格式其实是基于unicode。确实,unicode被很多编码格式拿来做基础编码。 在utf8编码格式下,英文字母占一个字节,和ascii完全相同。 汉字或者是其他字符占1-4个字节。
char
这里我们说一下java中的char类型。 在java中,char类型占2个字节,16位。 可以采取如下方式为char类型变量赋值:
- 作者:OnyWang 链接:https://www.jianshu.com/p/d9042d11fc6a
上一篇: 字节和字符
下一篇: 位、字节(8 位)、字(16 位)
推荐阅读
-
Java char、short、int、long 分别占几个字节和多少位[简单易懂]
-
Java 基础扫盲 - 字节、字符、位
-
字节、字符、位、位、字节之间的关系
-
[计算机基础] 简明扼要地解释高字节和低字节 I. 简要解释 II.高字节和低字节在 C 语言中的含义 III.16 位和 32 位数字的存储
-
重要基础知识:位、字、字节、字块的概念
-
位、字节、WORD、DWORD 的区别和联系 - Unicode 和 ANSI 的区别就像输入法中 "全宽 "和 "半宽 "的区别一样。 由于不同的 ANSI 编码有不同的标准(不同的字符集),对于给定的多字节字符串,我们必须知道它使用的是哪种字符集,才能知道它包含哪些 "字符"。对于 UNICODE 字符串来说,无论环境如何,它所代表的 "字符 "内容始终是相同的。Unicode 有一个统一的标准,定义了世界上大多数字符的编码,因此拉丁文、数字、简体中文、繁体中文和日文都可以存储在一个编码中。统一码是一个统一的标准,定义了世界上大多数字符的编码。 比特(Bit)和字节(Byte)的区别:例如USB2.0 标准接口的传输速率为 480Mbps,有一些人误认为是每秒 480 兆比特,同样网络带宽为 2MB,就容易误认为是每秒 2 兆比特。其实,480Mbps 应该是 480 兆比特/秒或 480 兆字节/秒,它等于 "60 兆字节/秒";同样,2MB,应该是 256 兆字节/秒。 Bit 和 Byte 译为 "比特",都是数据计量单位,比特="位 "或 "比特"。 Byte = 字节,即 1byte = 8bits,两者的换算关系为 1:8。 Mbps = mega bits per second(兆位/秒)是速率单位,因此 2M 带宽应为 2 兆位/秒,即 2MBps。MB = 兆字节(Megabytes,兆字节)是单位量,1MB/S(兆字节/秒)= 8MBPS(兆字节/秒)。 通常所说的硬盘容量是指 40GB、80GB、100GB,其中的 B 是指 Byte 也称为 "字节"。 1 KB=1024 字节 1 MB=1024 KB=1024*1024 字节 1 GB=1024 MB=1024*1024*1024 字节 例如,以前所谓的 56KB MODEM 转换过来的 56KBps 除以 8 就是 7Kbyte,所以真正从网上下载文件存在硬盘上的速度也是每秒 7Kbyte;也就是说,用 B 表示传输速度一般指 Bit;用 B 表示容量一般指 Byte。比特、字节、WORD、DWORD 的本质。
-
为什么UTF-8 和 GBK 会相互转换,为什么会一团糟?-锟斤拷 "是指在字节和字符的转换(编码和解码)过程中使用了不同的编码,找出编码和解码的编码,修改后使用同一种编码。 ===================== 补充 ========================== 在上面的文章中,其实一直回避了一个问题,那就是既然保存中的所有字符都需要转换成二进制,那么 java 是使用什么编码来保存字符的呢?这个问题我们其实可以不必深究,因为它对我们来说是透明的,我们只需假定 java 使用了某种可以表示所有字符的编码。由于这种透明性,我们可以假设 java 直接保存字符本身,就像上面所说的那样。 在 java 虚拟机中使用的是 unicode 字符集。
-
Java 基础_字符串方法和权限修改器__灌水 [强调已添加
-
Java] 基础 02:字节、比特、比特基础 02:字节、位、位
-
JAVA 流水号生成规则,5 位字符串,生成数千万个 uuid,使用 0-9、A-Z 36 位计算,按默认规则递增