文章

csharp的隐式转换/显示转换

        static void Main(string[] args)
        {
            ushort des;
            char sou = 'a';
            des = sou;
            WriteLine($"sou is {sou}");
            WriteLine($"des is {des}");

            ReadKey();
        }
隐式转换输出:
sou is a
des is 97
            byte des;
            short sou = 7;
            des = sou;
            WriteLine($"sou是{sou}");
            WriteLine($"des是{des}");
如果你如上所写,是错的,这里需要用到显示转换,也就是强制转换
            byte des;
            short sou = 7;
            des = (byte)sou; //他与python不同的是,c#的小括号是给类型自己的(byte)sou,而不是byte(sou)
            WriteLine($"sou是{sou}");
            WriteLine($"des是{des}");
显示转换输出:
sou是7
des是7


checked用于检测上下文溢出.如果使用unchecked效果等同于没使用checked

            byte des;
            short sou = 281;
            des = (byte)sou;
            WriteLine($"sou是{sou}");
            WriteLine($"des是{des}");
输出结果:
sou是281
des是25

我们看一下这两个数字的二进制:
281 = 100011001
25就= 000011001
255 = 011111111
byte可以存储的最大值是255
你看,当把281这个数字强制转换为byte类型后赋值给des,为什么十进制的281变成了25呢?
从二进制看的出,最左边的一位丢失了...

原文来自:csharp的隐式转换/显示转换,尊重自己,尊重每一个人;转发请注明来源!
0 0

发表评论