计算机基础知识相信大家应该不陌生吧,尤其是在学校中很多计算机课程都会涉及到,下面我们就一起来了解下,字节与字符的一些基本知识。
字节(Byte)
计算机中存储数据的一个单位。比它小的是位(bit,也叫比特),这是在计算机中数据存储的小计量单位,1位存放的是二进制的数据0和1。
当然比字节更大的是KB(千字节),1KB = 1024B,再到后面就是MB(兆字节),1MB = 1024KB,GB、TB……
Java中有用于表示字节的数据类型——byte,再次不妨回顾下有关在Java中有关byte的一些知识。
前面提到1个字节等于8个二进制位,那么也就是说1个字节能表示的大数为[0,
255](闭区间),但是,在Java中byte类型是有符号型的,也就是说在它的高位是符号位。也就是说除去高位符号位,还剩下7个二进制位,那么7个二进制所能表示的大数为[0,
127],这是正数,加上高位为1表示负数时,byte型数据类型所能表示的大数为[-127, 0],也就是说byte型的数据范围是[-127,
127],真的是这样吗?错了。上面的分析是错误的。Java中byte型数据类型的取值范围为[-128, 127]。
错误的原因是没有考虑到计算机中数值存储的编码问题。所以这又会继续延伸到原码、反码、补码的概念。
原码:高位表示符号位,0表示正数,1表示负数,其余位表示真实数值。前面的错误分析正是将计算机中数值存储定义为了原码,所以才会得到Java中byte型数据类型的取值范围是[-127,
127]。
反码:同样高位表示符号位,正数的反码与原码相同,而负数的反码除符号位外,其余位取反。
补码:同样高位表示符号位,正数的反码与原码相同,而负数的补码除符号位外,其余位取反+1。计算机中数值的存储正是补码。
字符(Char)
字符表示文字和符号。人与人之间通过人类语言进行沟通,计算机通过二进制来进行沟通,当人-计算机-人,中间多了计算机的媒介过后,中间就需要计算机对我们人类的语言符号“编码”进行传输,而计算机-人这个过程又称之为“解码”。这有点类似“加密”“解密”的过程。
在计算机刚出现的时候只能传输英文字符,这里的传输包括是显示和存储,前面提到要进行编码存储,既然要编码就需要一张表来表示A是什么,B是什么,就好比摩斯密码中的密码本一样。那时的“码表”也就是编码方式叫做ASCII。
计算机继续在发展,需要发展到其他国家和地区,此时就需要对汉字、日文、韩文等进行编码,但原有的ASCII肯定不能满足,它的设计是包括了英文和符号,此时就出现了ANSI编码(也叫做ASCII扩展),这实际上是一种规范,一种本地化的规范编码,例如在中文操作系统中ANSI代表的就是GB2312编码(当然也有它的扩展叫做GBK编码),在日文操作系统中ANSI代表的就是JIS等等。ANSI编码采用2个字节来表示一个字符(范围在0x80-0xFF),两个字节也就是16个二进制位,理论上可以表示216个字符,当然这需要减去0x00-0x79这个范围,这就能表示很多很多的字符了。GB2312编码也就才表示了6000多个常用汉字。不过这种编码方式还是带来了新的问题,这只是做了本地化,也就是说在GB2312的编码环境下,无法对日文进行编码。所以还需要做国际化。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。