计算机网络——二进制与字节

二进制与字节

1.二进制

1.1概念

二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。

1.2 为什么计算机要采用二进制?

首先,二进位计数制仅用两个数码。0和1,所以,任何具有二个不同稳定状态的元件都可用来表示数的某一位。而在实际上具有两种明显稳定状态的元件很多。例如,氖灯的“亮”和“熄” ;开关的“开” 和 “关”;电压的“高” 和“低”、“正”和 “负”;纸带上的“有孔”和“无孔”;电路中的“有信号” 和 “无信号”; 磁性材料的南极和北极等等,不胜枚举。 利用这些截然不同的状态来代表数字,是很容易实现的。不仅如此,更重要的是两种截然不同的状态不单有量上的差别,而且是有质上的不同。这样就能大大提高机器的抗干扰能力,提高可靠性。而要找出一个能表示多于二种状态而且简单可靠的器件,就困难得多了。

其次,二进位计数制的四则运算规则十分简单。而且四则运算最后都可归结为加法运算和移位,这样,电子计算机中的运算器线路也变得十分简单了。不仅如此,线路简化了,速度也就可以提高。这也是十进位计数制所不能相比的。

第三,在电子计算机中采用二进制表示数可以节省设备。可 以从理论上证明,用三进位制最省设备,其次就是二进位制。但由于二进位制有包括三进位制在内的其他进位制所没有的优点,所以大多数电子计算机还是采用二进制。此外,由于二进制中只用二个符号 “ 0” 和“1”,因而可用布尔代数来分析和综合机器中的逻辑线路。 这为设计电子计算机线路提供了一个很有用的工具。

第四,二进制的符号“1”和“0”恰好与逻辑运算中的“对”(true)与“错”(false)对应,便于计算机进行逻辑运算。

1.3二进制计数

1.3.1进制表示

在基数 b b b 的位置记数系统(其中 b b b 是一个正自然数,叫做基数), b b b 个基本符号(或者叫数字)对应于包括 0 0 0 的最小 b b b 个自然数。 要产生其他的数,符号在数中的位置要被用到。最后一位的符号用它本身的值,向左一位其值乘以 b b b 。一般来讲,若 b b b 是基底,若有n位整数,用数字 a 0 a 1 a 2 . . . a n − 1 a_0a_1a_2...a_{n-1} a0a1a2...an1表示它的系数,有m位小数,用数字 c 1 c 2 . . . c m c_1c_2...c_m c1c2...cm表示它的加权系数,则我们在 b b b 进制系统中的表示,如下形式
( a n − 1 a n − 2 . . . a 1 a 0 c 1 c 2 . . . c m ) b = ∑ k = 0 n a k b k + ∑ k = 1 m c k b − k (a_{n-1}a_{n-2}...a_1a_0c_1c_2...c_m)_b=\displaystyle\sum_{k=0}^na_kb^k + \displaystyle\sum_{k=1}^m c_kb^{-k} (an1an2...a1a0c1c2...cm)b=k=0nakbk+k=1mckbk

其中数 b k b^k bk b − k b^{-k} bk是相应数字的比重。

1.3.2二进制表示

二进制数据也是采用位置计数法,其位权是以2为底的幂。对于有n位整数,m位小数的二进制数据用加权系数展开式表示,可写为
( a n − 1 a n − 2 . . . a 1 a 0 a − 1 a − 2 . . . a − m ) 2 = a n − 1 × 2 n − 1 + a n − 2 × 2 n − 1 + … + a 1 × 2 1 + a 0 × 2 0 + a − 1 × 2 − 1 + a − 2 × 2 − 2 + … + a − m × 2 − m (a_{n-1}a_{n-2}...a_1a_0a_{-1}a_{-2}...a_{-m})_2=a_{n-1} × 2^{n-1} + a_{n-2} × 2^{n-1} + \dotso +a_1× 2^1 + a_0× 2^0 + a_{-1}× 2^{-1} + a_{-2}× 2^{-2} + \dotso + a_{-m}× 2^{-m} (an1an2...a1a0a1a2...am)2=an1×2n1+an2×2n1++a1×21+a0×20+a1×21+a2×22++am×2m

:将二进制数据111.01写成加权系数的形式。
( 111.01 ) 2 = 1 × 2 2 + 1 × 2 1 + 1 × 2 0 + 0 × 2 − 1 + 1 × 2 − 2 \left(111.01\right)_2 = 1 × 2^{2} + 1 × 2^{1} + 1 × 2^{0} +0 × 2^{-1} + 1 × 2^{-2} (111.01)2=1×22+1×21+1×20+0×21+1×22

1.4 运算

1.4.1 加法
二进制加法有四种情况: 0+0=0,0+1=1,1+0=1,1+1=10(0 进位为1)。
例:
在这里插入图片描述

1.4.2 减法
二进制减法有四种情况:0-0=0,1-0=1,1-1=0,10-1=1。
例:
在这里插入图片描述

1.4.3 乘法
二进制乘法有四种情况: 0×0=0,1×0=0,0×1=0,1×1=1。
例:
在这里插入图片描述

1.4.4 除法
二进制除法有两种情况(除数只能为1):0÷1=0,1÷1=1。
例:
在这里插入图片描述

1.5 负数的二进制

1.5.1 十进制变二进制:原码–反码–加一(补码);
以8位-5为例
5 的二进制 00000101 取反 11111010 加一 11111011 得到 − 5 11111011 \def\arraystretch{1.5} \begin{array}{c} 5的二进制 &00000101\\ \hline 取反 &11111010 \\ \hline 加一 &11111011\\ \hline 得到-5 & 11111011 \end{array} 5的二进制取反加一得到500000101111110101111101111111011
1.5.1 二进制变十进制:减一–反码–原码
以8位-5为例
− 5 的二进制 11111011 减一 11111010 取反得到 5 00000101 \def\arraystretch{1.5} \begin{array}{c} -5的二进制 &11111011\\ \hline 减一 &11111010 \\ \hline 取反得到5 &00000101\\ \end{array} 5的二进制减一取反得到5111110111111101000000101

2.字节

2.1什么是字节?

字节(Byte)是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符。

一个字节存储8位无符号数,储存的数值范围为0-255。如同字元一样,字节型态的变数只需要用一个位元组(8位元)的内存空间储存。

2.2 单位

bit与Byte
数据存储是以“字节”(Byte)为单位,数据传输大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B),是最小一级的信息单位。

思考1:为什么Byte要用8位?

计算机设计之初为了传递数字和一些符号信息,制订了美国信息交换标准代码,ASCII编码:全称American Standard Code for information Interchange,翻译过来就是美国信息交换标准码,而发现需要七位才能满足编码要求,但是一个字节不可能规定为7位,所以可以说这一标准也促进了将8位作为一个字节的形成, 就这样8位也就成了标准的1字节了。

思考2:为什么一个字节存储8位无符号数,储存的数值范围为0-255?
由于一个字节储存的数值范围为0-255,则有
最大值 255 对应二进制数 11111111 恰好达到二进制8位满1,则8位二进制数可以表示任何0-255的数。

2.3 计算机存储换算

信息存储量是度量存储器存放程序和数据的数量。其主要度量单位是字节,1个字节(Byte)等于8位(b)二进制。位(bit,Binary Digits):存放一位二进制数,即0或1,为最小的存储单位,8个二进制位为一个字节单位。一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。英文标点占一个字节,中文标点占两个字节 。

常用换算:
1字节(Byte)=8位(bit)
1KB( Kilobyte,千字节)=1024B
1MB( Megabyte,兆字节)=1024KB
1GB( Gigabyte,吉字节,千兆)=1024MB
1TB( Trillionbyte,万亿字节,太字节)=1024GB

C#值类型换算:

类型字节
bool81
byte81
char162
decimal12816
double648
float324
int324
long648
sbyte81
short162
uint324
ulong648
ushort162

C# sizeof() 方法字节校验代码:

            Console.WriteLine("bool size:"+ sizeof(bool));
            Console.WriteLine("byte size:" + sizeof(byte));
            Console.WriteLine("char size:" + sizeof(char));
            Console.WriteLine("decimal size:" + sizeof(decimal));

注:引用类型如string,在不同的编码转换后的字节数不同,如unicode中一个汉字的字节数为2,而utf8中一个汉字的字节数为3,如下代码所示

            string s = "好";
            byte[] unicodeStringByte = Encoding.Unicode.GetBytes(s);
            byte[] utf8StringByte = Encoding.UTF8.GetBytes(s);
            Console.WriteLine("defaulStringByte size:" + unicodeStringByte.Length);
            Console.WriteLine("utf8StringByte size:" + utf8StringByte.Length);

运行结果:
在这里插入图片描述

[参考]百科二进制
[参考]百科字节
[参考]Byte

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值