1个字节8位,不够8位左边加0凑够8位。
计算机内存存储 0 和 1
计算机内存之中只存储0和1(二进制),通过硬件内存中的晶体管是否充电来存储0和1。不充电代表0,充电代表1。
纵列的8位一存,以横行的8列控制,当横行和纵列同时充满电的时候,横纵确定的那一位为1。
计算机刷新,不断对内存中的晶体管进行充电来保持计算机的正常运行。
存储数字
计算机之中以二进制的模式来存储数字。
所有非二进制的数字(如十六进制数、八进制数、十进制数)都会被转换成二进制存储。
存储正整数
存储正整数时,使用该正整数的原码(二进制数)。
存储负整数
存储负整数时,用其对应正数的补码表示。一个负数的补码等于该负数的相反数的反码加1。(如:-5的补码表示:-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011))
存储小数
存储带小数的数字时,正数部分按照以上规则,小数部分以浮点数的形式存储。
十进制小数转二进制小数(1/10为底的小数转化为1/2为底的小数)
0.75(10) = 7 * 1/10 + 5 * 1/10^2
= n1 * 1/2 +n2 * 1/4
= 0.5 + 0.25
= 1 * 1/2^1 + 1* 1/2^2
= 0.11(2)
从右往左数
存储字符
美国国家标准学会制定ASCII(美国信息交换标准代码)(1个字节表示一个字符),将英文字符和常用符号编号表示。一个相应的字符对应一个特定的十进制数。存储某个字符,就存储该字母对应ASCII值的二进制值。
参考表链接
存储中文字符
中国自主制定GB 2312(中国国家标准简体中文字符集)字符集(2个字节表示一个字符),包括6763个汉字。
之后微软推出GBK字符集,扩展GB 2312字符集,可以存储生僻字/繁体字/日语和朝鲜语等。
存储所有字符
Unicode联盟将全球字符编号,编成Unicode字符集(4个字节表示一个字符)。
截止2016年6月,已经又128237个字符。
UTF-8存储Unicode
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码。UTF-8用1到6个字节编码Unicode字符.
UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。
你 -> 00000000 00000000 01001111 01100000 Unicode
你 -> 11100100 10111101 10100000 Utf-8
前3位111表示有3个字节,第2个字节去掉10,第3个字节去掉10。二进制01001111 01100000
现实问题
JavaScript使用UCS-2编码
后果
- JavaScript无法表示\uFFFF之后的字符,某些情况下会出bug
- JavaScript获取HTML某些字符的length时会多出1个长度。