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个数值,然后将它们打印出来,结果又如何呢?

byte数据类型_模运算

当我们给变量age赋值为-1时,提示常量值-1无法转换为byte。同理,给age赋值256时,由于超过了255的限制,提示常量值256无法转换为byte。

byte数据类型_模运算_02

说明编译器至少在程序员编码时,做了一定的错误限制。别急,我们还有别的办法可以实现这一测试。

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日