C#教程

sbyte数据类型

sbyte表示一种整型数据,它的范围是-128到+127,它是一个有符号的8位整数,在.NET中与之对应的是System.Sbyte。

C#中的byte类型的范围是0-255。它们两者都只能表示256个数值,只不过,一个有符号,一个没有符号。为什么有符号的sbyte的范围是-128到+127呢?

首先8位的二进制数据的范围本来应该是00000000-11111111,然后我们分两种情况来讨论。

第一种情况,在无符号的byte类型二进制数据中,直接将00000000视为0(十进制),将11111111视为255(十进制)。

第二种情况,在有符号的sbyte类型中,左边第一位表示符号位,0表示正数,1表示负数,所以01111111表示一个sbyte最大的正数,也就是127。而负数的二进制在计算机中表示为正数的补码,补码等于反码加1,所以128的反码用二进制表示是01111111,再加1得到补码为10000000。注意,10000000在无符号二进制状态下,它本来是128,而在有符号数中,通常将最高有效位为0的认为是正数,最高有效位为1的认为是负数,因此1000 0000就表示为-128了。所以8位有符号整数的范围是-128~127

观察下面这个例子

internal class Program
{
    static void Main(string[] args)
    {
        sbyte min_sbyte = -128;
        SByte max_sbyte = 127;

        Console.WriteLine($"min_sbyte={min_sbyte}");
        Console.WriteLine($"max_sbyte={max_sbyte}");
        Console.WriteLine($"MinValue ={sbyte.MinValue}");
        Console.WriteLine($"MaxValue ={sbyte.MaxValue}");

        short a = -129;
        sbyte age = (sbyte)a;
        Console.WriteLine($"将-129转为sbyte={age}");

        short b = +128;
        age = (sbyte)b;
        Console.WriteLine($"将+128转为sbyte={age}");            

        var v = Console.ReadKey();
    }
}

输出结果:

min_sbyte=-128
max_sbyte=127
MinValue =-128
MaxValue =127
将-129转为sbyte=127
将+128转为sbyte=-128

为什么将-129转为sbyte=127?将+128转为sbyte=-128?这里和上一节关于byte的超出范围转换是一样的道理。

比如+128这个数,二进制表示为10000000,由于第一位表示为符号位,所以10000000=-0,-0就看成是sbyte的最小值,可不就是-128嘛。

当前课程源码下载:(注明:本站所有源代码请按标题搜索)

文件名:003-《sbyte数据类型》源代码
链接:https://pan.baidu.com/s/1Bq2lX7cruUbklLwgjGggSw
提取码:byte

——重庆教主 2023年12月25日

copyright @重庆教主 C#中文网 联系站长:(QQ)23611316 (微信)movieclip (QQ群).NET小白课堂:864486030 | 本文由C#中文网原创发布,谢绝转载 渝ICP备2023009518号-1