byte是我们学习的第一个数据类型,表示一个8位无符号整数,也表示一个字节。在计算机中,一个字节的长度是8位(bit)。byte类型的范围是0~255,转换为二进制是00000000~11111111。
C#中byte对应的.NET数据类型是System.Byte。
声明和初始化
我们可以使用.NET提供的关键字声明一个Byte变量,也可以使用C#关键字声明一个byte变量,两者在内存上的长度和特性是一致的。例如:
byte age = 18;
Byte money = 18;
byte的范围被定义在0-255当中,我们可以从它的源代码中找到这一点。或者直接输出范围的最小值和最大值。
public const byte MaxValue = 255;
public const byte MinValue = 0;
internal class Program
{
static void Main(string[] args)
{
byte age = 18;
Byte money = 99;
Console.WriteLine($"age={age}");
Console.WriteLine($"money={money}");
Console.WriteLine($"MinValue ={byte.MinValue}");
Console.WriteLine($"MaxValue ={byte.MaxValue}");
var v = Console.ReadKey();
}
}
输出如下:
age=18
money=99
MinValue =0
MaxValue =255
我们已知byte能存储的数值范围是0-255,那么,假如我们给它赋值-1,0,255,256这4个数值,然后将它们打印出来,结果又如何呢?
当我们给变量age赋值为-1时,提示常量值-1无法转换为byte。同理,给age赋值256时,由于超过了255的限制,提示常量值256无法转换为byte。
说明编译器至少在程序员编码时,做了一定的错误限制。别急,我们还有别的办法可以实现这一测试。
short a = -1;
age = (byte)a;
Console.WriteLine($"将-1转为byte={age}");
short b = 256;
age = (byte)b;
Console.WriteLine($"将256转为byte={age}");
short c = 257;
age = (byte)c;
Console.WriteLine($"将257转为byte={age}");
因为short型的数据可以表示的范围是-32768到32767,所以我们可以先定义一个short变量,然后通过类型转换,将其转换成byte型,最后结果如下
将-1转为byte=255
将256转为byte=0
将257转为byte=1
我们先打个比方,byte就好比星巴克的小杯,比如可以容纳100毫升的咖啡,short就好比大杯,可以容纳500毫升的咖啡,现在大杯装有150毫升的咖啡,我们强制全部倒进小杯中,当这个过程结束后,小杯中的咖啡有多少毫升?
在现实中,此时小杯里面有100毫升的咖啡,还溢出了50毫升,散落在桌上。而在计算机当中,答案却相反,将一个256的数值存到byte里面,得到的答案是0,将257的数值装到byte里面,得到的答案是1。这是为什么呢?
short在内存中占2个字节,byte在内存中只占1个字节,将大杯里面的咖啡倒进小杯里面,这会造成精度损失,或者数据丢失。计算机在处理这种情况时,会通过一个计算公式,如上面这个例子:256%256=0,所以将256赋值给byte时,得到结果为0,257%256=1,所以得到结果为1。
也就是说short和byte求模运算(白话:short除以byte得到余数),将这个求模运算的余数结果保存到byte当中。由此我们可以得如下推论:在下列等式中,左边是short型,右边是byte型。
- ...
- -3 = 253
- -2 = 254
- -1 = 255
- 0 = 0
- 1 = 1
- 2 = 2
- 3 = 3
- 253 = 253
- 254 = 254
- 255 = 255
- 256 = 0
- 257 = 1
- 258 = 2
- 259 = 3
- ...
怎么去快速理解它们之间的转换关系呢?
等式 | 换算关系 | 换算关系 |
-3 = 253 | -3 % 256 =253 | -3=(-1)*256+253 |
-2 = 254 | -2 % 256 =254 | -2=(-1)*256+254 |
-1 = 255 | -1 % 256 =255 | -1=(-1)*256+255 |
0 = 0 | 0 % 256 =0 | 0=(+0)*256+0 |
1 = 1 | 1 % 256 =1 | 1=(+0)*256+1 |
2 = 2 | 2 % 256 =2 | 2=(+0)*256+2 |
3 = 3 | 3 % 256 =3 | 3=(+0)*256+3 |
253 = 253 | 253 % 256 =253 | 253=(+0)*256+253 |
254 = 254 | 254 % 256 =254 | 254=(+0)*256+254 |
255 = 255 | 255 % 256 =255 | 255=(+0)*256+255 |
256 = 0 | 256 % 256 =0 | 256=(+1)*256+0 |
257 = 1 | 257 % 256 =1 | 257=(+1)*256+1 |
258 = 2 | 258 % 256 =2 | 258=(+1)*256+2 |
259 = 3 | 259 % 256 =3 | 259=(+1)*256+3 |
——重庆教主 2023年12月25日