面试题:一个字节多少位。答 8 位,面试官接着问,那为什么 100M 宽带下载只有十几兆。这两个问题其实是一回事。
位和字节差着一个大写字母
bit 是位,binary digit 的缩写,只有 0 和 1 两种状态。byte 是字节,1 字节等于 8 位。写作 B 和 b 要分清:MB 是兆字节,Mb 是兆比特,差八倍。1 个字节有 256 种组合,因为 2 的 8 次方等于 256,一个字节的取值就是 0 到 255。宽带说的 100M 是 100Mbps,除以 8 才是理论下载速度 12.5MB/s,实际还要扣掉协议开销,跑满十一二兆就算正常。
早期计算机一个字节的位数并不统一,有 6 位、7 位、9 位的机器。后来 IBM 那套 8 位架构成了主流,ASCII 码用 7 位表示字符,留一位做校验,8 位刚好凑成一个整齐的单位。再往后国际标准定下来,一个字节就是 8 位,半个字节叫 nibble,正好对应一位十六进制数。RGB 颜色每个通道占 1 字节,所以每个通道是 0 到 255,三个通道就是 24 位色。
一个字符占几个字节
ASCII 字符一个字节,英文字母、数字都是。中文要看编码:GBK 里一个汉字两字节,UTF-8 里通常是三字节,生僻字和 emoji 能到四字节。所以同一段文字,存成不同编码,文件大小差不少。数据库字段长度按字符算还是按字节算,建表时要看清楚。IPv4 地址固定 4 字节,这也是它地址空间有限的原因之一。
KB 到底是 1000 还是 1024
操作系统里 1KB 按 1024 字节算,硬盘厂商按 1000 算,这就是 500G 硬盘显示四百多 G 的原因。严格写法里 1024 叫 KiB,1000 才叫 KB,日常没人分这么细。买硬盘、算流量,心里有这八折左右的差就行。
换算关系记一串就够
8 位是 1 字节,1024 字节是 1KB,1024KB 是 1MB,往上到 GB、TB 都一样。一个字节多少位 这个问题,答案是 8,真正有用的是记住大小写 B 和 b 的区别,以及 1024 和 1000 的两套算法,两种都得认识。
下次看到 200M 宽带别嫌慢,先按除以 8 算一遍再说话。