byte,bit,char

本文深入探讨了计算机中内存的基本单位及其与不同编码方式的关系,包括bit、byte的概念,以及ASCII、UTF-8和Unicode编码如何影响数据存储空间。同时,文章解释了数据库中char类型字段的实际存储机制。

因为项目需要的硬件设备对于内存要求很严格,设备内存大了价格昂贵不能,设备内存小了不能存储足够的信息也不好。

于是调查设备的时候研究了下容量相关的知识。

bit = 0/1   就是一个二进制数,这是计算机运算的最小单位,也是最基本的单位,什么都会转为01来计算

byte  = 8bit    byte也就是字节。 是文件存储的最小单位。

不同的编码,存储不同的内容,占用的空间不同。

AscII编码:unicode 存储英文和标点就是一个字节 1 byte 存中文就要2byte.

UTF-8 :存英文要1个byte,存中文要3个byte。

Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。 java采用unicode

另外,字符,就是普通理解的字,比如【A,B,?】 都是字符,她们占用一个byte也就是一个字节。

汉字“吴” 也是一个字符。但是这个字符 = 2个byte。

数据库里面的char 对应几个呢?

比如定义一个字段是char(1)  可以保存1,A,a,? 那么能够保存“吴”吗?

答案是可以。

因为数据库的char 是一个字符型数据,相当于本身,一个char 就是两byte, 存A的时候,虽然只用了一个byte . 但是会自动补0 ,也就是0A。  那么存汉字的时候,就自然而然也可以存的

1KB = 1024B;

1M = 1024KB;

1G = 1024M;

### 字节(Byte位(Bit)之间的转换方法 字节(Byte)和位(bit)是计算机存储和数据传输中最基本的单位。其中,1个字节由8个位组成。这种关系是固定的,是计算机系统中最基础的单位换算规则[^1]。 #### 1. 位(bit字节(Byte)的基本定义 - **位(bit)**:是计算机中最小的存储单位,表示一个二进制数字(0或1)。 - **字节(Byte)**:是计算机存储和处理数据的基本单位,1个字节等于8个位。 因此,它们之间的换算关系为: - **1 Byte = 8 bits** - **1 bit = 1/8 Byte** #### 2. 位字节的转换公式 - **从字节转换到位**: `bits = bytes × 8` 例如:4字节转换为位:`4 × 8 = 32 bits` - **从位转换为字节**: `bytes = bits ÷ 8` 例如:64位转换为字节:`64 ÷ 8 = 8 Bytes` #### 3. 实际应用示例 在数据传输速率中,常用单位为 **bps(bits per second)** 和 **Bps(Bytes per second)**: - **1 Mbps(兆位每秒)** = 1,000,000 bits per second - **1 MBps(兆字节每秒)** = 1,000,000 Bytes per second = 8,000,000 bits per second 例如,一个USB 2.0接口的传输速率为480 Mbps,换算为字节每秒为: - `480 Mbps ÷ 8 = 60 MBps` 另一个常见例子是56 Kbps的调制解调器: - `56 Kbps ÷ 8 = 7 KBps` #### 4. 编程语言中的转换实现 在编程中,尤其是在底层数据处理时,经常需要将字节转换为位或反之。以下是一些常见语言中的转换方法。 ##### Python 示例:字节转位数组 ```python def byte_to_bits(byte): return [(byte >> i) & 1 for i in reversed(range(8))] # 示例:将字节 0b10101010 转换为位数组 byte = 0b10101010 bits = byte_to_bits(byte) print(bits) # 输出 [1, 0, 1, 0, 1, 0, 1, 0] ``` ##### Java 示例:字节转位数组 ```java public class BitConverter { public static boolean[] byteToBits(byte b) { boolean[] bits = new boolean[8]; for (int i = 0; i < 8; i++) { bits[i] = ((b >> i) & 1) == 1; } return bits; } public static void main(String[] args) { byte b = (byte) 0b10101010; boolean[] bits = byteToBits(b); for (boolean bit : bits) { System.out.print(bit ? "1" : "0"); } // 输出 10101010 } } ``` ##### C 示例:字节转位数组 ```c #include <stdio.h> void byte_to_bits(unsigned char byte, int bits[8]) { for (int i = 0; i < 8; i++) { bits[i] = (byte >> i) & 1; } } int main() { unsigned char byte = 0xA; // 二进制 1010 int bits[8]; byte_to_bits(byte, bits); for (int i = 7; i >= 0; i--) { printf("%d", bits[i]); } // 输出 00001010 return 0; } ``` #### 5. 注意事项 - 在进行数据传输速率的计算时,注意区分 **bps(bit per second)** 和 **Bps(Byte per second)**,它们之间相差8倍。 - 实际传输速率受硬件性能、协议开销等因素影响,理论值通常高于实际值[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值