bit byte 字符集 编码 乱码 还有java

首先java八大基本数据类型:
boolean 单个的boolean 类型变量在编译的时候是使用的int 类型。而对于boolean 类型的数组时,在编译的时候是作为byte array来编译的所以boolean 数组里面的每一个元件占一个字节,
short 短整型 两个字节
int 整形 四个字节
long 长整型 八个字节
char 字符 两个字节
flot 单精度浮点型 四个字节
double 双精度浮点型 八个字节
byte 字节

首先我们知道目前使用的计算机都是二进制的,只能存储0和1,为啥是二进制的呢,因为双稳态的电路设计和实现起来比较经济实惠,可以量产,其实理论上来讲,十稳态的电路也肯定是能搞出来的
但是那样的话为了满足稳定性而导致的额外开销就太得不偿失了(并且稳定性怎么样还难说)
什么,你说什么是稳态?
简单描述一下:就是事物能保持持久稳定的状态
比如办公司的电灯开关,你按一下,它就开了,并且在没有外力侵扰的情况下他会一直开着,你再按一下它就关了,同样也是在没有外力干扰的时候一直会关着,开和关就是它的稳定态,然后它只有两个稳定态,所以电灯开关是一个双稳态的系统
再比如楼道里面的声控灯,你吼一嗓子,它就开了,然后一会就关了,你必须再吼一嗓子,它才会再开,它能保持持久稳定的状态只有关闭,所以这是一个单稳态的系统

那现在继续主题
在计算机里面 bit是计算机存储的最小单元(就是存放0101的地方),一个byte八个位(八个bit),即一个byte可以表示0000000011111111(02^8-1)范围的数。
拿我们最常接触的int来举例,int占四个字节 一共32个位,理论上来讲int可以表示的数字范围为(0~2^32-1)但是由于负数的存在,所以将第一位用来表示正负,所以int类型的值区间就为 -231~(231-1)约为(-2147483648~2147483647)ps:很多游戏里面都会因为这个int上限产生bug(比如某毒奶粉)伤害爆炸一波上限超过了21E,你懂的。
这里是数字 比较好理解,也就是一个二进制和十进制的转换,那么字符呢,只能存储0101的计算机是怎么表示字符的呢,我们先看一段代码

在这里插入图片描述
是不是很神奇,char能直接参与加减运算,也能直接转换成int,并且关注过String类的小伙伴也能发现,String里面的hashcode方法也是这么玩的

在这里插入图片描述
到这里也差不多猜出来了,char实际上就是用数字表示字符,类似于一种数字信号,(比如数字0表示字母a,数字1表示字母b,当然实际不是这样的)
到了这里问题就来了,使用英文的国家可能只关心自己的那几十个字母,再加上一些常用符号,一个字节八个位已经是绰绰有余,然是互联网全球化以后这些问题就很难处理了
各个国家的语言文字那么多,八个字节光是装汉字都装不下,更别说一百多个国家那么多语言了(当然现在依然还是有些语言是没有录进来的)
最开始当然是继续往后面添加,不够了就商量一下给扩一个字节
然后这期间各个国家地区自己发展互联网的过程中也给自己的语言适配了各种编码,这就是早期互联网从业者最头疼的编码问题来源,各种乱七八糟的字符集和编码格式,什么GBKxxx,BIGXXX,ASxx等,一般这些字符集还都会自己匹配一套编码,那就更乱了,本来字符映射都错位了,编码方式还不一样,那还不是满屏的马赛克。
这样搞下去肯定是不行的,互联网各种规范各种标准都是为了统一,这么重要的领域当然不能放过,于是有了unicode字符集,他基本收录了目前全球主流的各种语言和符号,字符集统一了,接下来就是编码了,我们用的多的是UTF-8,这个优势是可变长度,能节省空间,具体编码规则可以查阅专业资料
END

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值