计算机中的单位
1 bit----------位、比特
2 byte--------字节
3 kb---------千字节
4 mb--------兆字节、百万字节
5 gb--------吉字节、十亿字节、千兆字节
6 tb--------太字节、万亿字节
7 pb--------拍字节、千万亿字节
8 eb-------艾字节、百亿亿字节
9 zb--------泽字节、十万亿亿字节
10 yb-----尧字节、一亿亿亿字节
计算机是硬件,需要通电。
若为正电------1
若为负电------0
这里的1和0即表示一个比特位。各单位的换算关系为:
1B(byte)= 8 bit;
1KB(Kilobyte)=1024 B= 2^10 B;
1MB(Megabyte)=1024 KB= 2^20 B;
1GB(Gigabyte)=1024 MB= 2^30 B;
1TB (Trillionbyte) = 1024 GB = 2^10 GB = 2^40 B;
1PB (Petabyte) = 1024 TB = 2^10 TB = 2^50 B;
1EB (Exabyte) = 1024 PB = 2^10 PB = 2^60 B;
1ZB (Zettabyte) = 1024 EB = 2^10 EB = 2^70 B;
1YB (Yottabyte) = 1024 ZB = 2^10 ZB = 2^80 B;
各进制
二进制(0~1)
用字母 B 表示,代表Binary。
二进制----->八进制
整数部分
从右往左每三位划分为一组(不足三位的在左边补零)
小数部分
从左往右每三位划分为一组(不足三位的在右边补零)
然后将每组二进制数转换为对应的八进制数(000-111 对应 0-7)。
例如,将二进制数101110.101转换为八进制,得到结果为56.5。
10101.1011(二进制) = 25.54(八进制)
010|101|.|101|100
二进制----->十进制
整数部分
从右往左,每一位的数字乘以2的幂次(从0开始),然后将它们相加,即可得到对应的十进制数。
例如,二进制数 1011
的十进制表示为:
(1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 8 + 0 + 2 + 1 = 11)
小数部分
从左往右,每一位的数字乘以2的次幂(从-1开始),然后将它们相加,即可得到对应的十进制数。
例如,二进制数0.1101的十进制表示为:
(1 * 2^-1 + 1 * 2^-2 + 0 * 2^-3 + 1 * 2^-4 = 0.8125)
二进制----->十六进制
二进制转十六进制与转八进制类似,只不过现在是每四位划分为一组,其余规则都相同。
八进制(0~7)
用字母 O 或 Q 表示,代表Octal。
八进制----->二进制
将八进制数的每一位转换为对应的三位二进制数(0-7 分别对应 000-111)。
例如,八进制数 54.12
的二进制表示为:
5O = 101B、4O = 100B、1O = 001B、2O = 010B
所以,二进制表示为 101100.00101
。
八进制----->十进制
八进制转十进制与二进制转十进制方法类似,只不过二进制是乘以2的次幂,而八进制是乘以8的次幂。
八进制----->十六进制
可以先将八进制转换为二进制,再通过二进制转换成十六进制。
十进制(0~9)
用字母 D 或 K 表示,代表Decimal。
十进制----->二进制
整数部分
使用“除2取余,倒序排列”的方法。将十进制数不断除以2,取余数,直到商为0。然后将得到的余数从右到左排列(即最后一次的余数在最左边),即可得到对应的二进制数。
例如,十进制数 11
的二进制表示为:
(11 / 2 = 1,商为5)
(5 / 2 = 1,商为2)
(2 / 2 = 0,商为1)
(1 / 2 = 1,此时商为0) //在C语言中,“/”表示取余符号。
所以,二进制表示为 1011
。
小数部分
使用“乘2取整,顺序排列”的方法。用2乘十进制小数,得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。然后把取出的整数部分按顺序排列起来,先取出的整数在最左边。
例如,十进制数0.25的二进制表示为:
(0.25 * 2 = 0.5,整数部分为0,小数部分为0.5)
(0.5 * 2 = 1.0,整数部分为1,小数部分为0.0)
所以,二进制表示为 0.01。
十进制----->八进制
与转二进制方法类似,把2全改成8即可。
十进制----->十六进制
与转二进制方法类似,把2全改成16即可。
十六进制(0~9,A~F或a~f)
用字母 H 表示,代表Hexadecimal。
十六进制----->二进制
与八进制转二进制方法类似,只不过三位变为四位。
十六进制----->八进制
可以先将十六进制转换为二进制,再通过二进制转换成八进制。
十六进制----->十进制
十六进制转十进制与二进制转十进制方法类似,只不过二进制是乘以2的次幂,而十六进制是乘以16的次幂。
上一期答案揭晓
C语言定义多种数据类型是为了满足不同的编程需求和数据表示。以下是为什么C语言定义多种数据类型的几个主要原因:
- 数据大小和范围:不同的数据类型有不同的存储大小和表示范围。例如,
char
通常用于存储字符,占用一个字节(在某些系统上可能是多个字节,但通常是一个)。而int
、long
、short
等整数类型则用于存储不同范围的整数。使用适当的数据类型可以确保数据在存储和计算时不会溢出或丢失精度。 - 内存效率:选择正确的数据类型可以优化内存使用。例如,如果知道某个变量只需要存储0到255之间的值,那么使用
unsigned char
而不是int
可以节省内存。 - 可读性:使用合适的数据类型可以使代码更具可读性。例如,使用
float
或double
表示浮点数,使用char
表示字符,这些都有助于读者理解代码的目的和用途。 - 可移植性:虽然不同的系统和编译器可能对数据类型的大小和表示有所不同,但C语言标准定义了每种数据类型的最小范围和大小。这有助于确保在不同平台上的代码具有相似的行为。
- 特定功能:某些数据类型具有特定的功能。例如,
enum
类型允许你定义一组命名的常量,这些常量在逻辑上属于同一类型。struct
和union
类型允许你创建复合数据类型,这些类型可以包含多个字段或成员。 - 与硬件交互:C语言经常用于与底层硬件进行交互,如嵌入式系统编程。在这种情况下,了解和控制数据在内存中的表示方式至关重要。通过使用不同的数据类型和修饰符(如
volatile
),你可以更精确地控制数据的存储和访问方式。 - 支持库函数:C语言标准库中的许多函数都接受特定类型的参数。例如,
printf()
函数用于打印格式化的输出,它接受一个格式字符串和一系列与格式说明符匹配的参数。使用正确的数据类型可以确保这些函数按预期工作。
总之,C语言定义多种数据类型是为了满足不同的编程需求和数据表示方式。通过选择合适的数据类型,你可以编写更高效、更可读、更可移植的代码。