C#入门——类型转换(隐式转换和显式转换)

目录

前言

1.隐式转换

1.1    知识点

1.2   练习题

2.显式转换

2.1   知识点

2.2   练习题


前言

视频资料来源于bilibili 唐老狮


1.隐式转换

1.1    知识点

namespace lesson7_隐式转换
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 类型转换——隐式转换
            //什么是类型转换?
            //类型转换 就是不同变量类型之间的相互转换
            //隐式转换的基本规则——> 不同类型之间自动转换
            //大范围装小范围
            #endregion

            #region 知识点一   相同大类型之间的转换
            //有符号   long   int   short  sbyte
            long l = 1;
            int i = 1;
            short s = 1;
            sbyte sb = 1;
            //隐式转换 int隐式转换成了long
            //可以用大范围 装小范围的  类型  (隐式转换)
            l = i;
            //不可能够用小范围的类型去装大范围的类型
            //i = l;

            //无符号   ulong   uint   ushort  byte
            ulong ul = 1;
            uint ui = 1;
            ushort us = 1;
            byte b = 1;

            ul = ui;
            ul = us;
            ul = b;
            ui = us;
            ui = b;
            us = b;

            //浮点数  decimal      double——> float
            decimal de = 1.1m;
            double d = 1.1;
            float f = 1.1f;
            //decimal这个类型 没有办法用隐式转换的形式  去存储 double和float
            //de = d;
            //de = f;
            //float 是可以隐式转换成  double
            d = f;

            //特殊类型  bool    char    string
            //他们之间  不存在隐式转换
            #endregion

            #region 知识点二   不同大类型之间的转换
            #region 无符号和有符号之间
            //无符号    不能装负数
            ulong ul2 = 1;
            uint ui2 = 1;
            ushort us2 = 1;
            byte b2 = 1;

            //无符号装有符号
            //有符号的变量 是不能够 隐式转换成  无符号的
            // b2=sb2;
            //us2=sb2;
            //ul2=sb2;
            #endregion

            #region 无符号装有符号
            //有符号的变量 是不能够  隐式转换成 无符号的
            // b2=sb2;
            //us2=sb2;
            //ul2=sb2;

            #endregion

            #region 有符号装无符号
            //有符号的变量 是可以 装 无符号变量的 前提是 范围一定要是涵盖的 存在隐式转换
            //i2 = ui2;   因为有符号的变量  可能会超过  这个无符号变量的范围;
            //i2 = b2;   因为有符号的变量 不管是多少 都在 无符号变量的范围内
            #endregion

            #region 浮点数装整数  整数转为浮点数  是存在隐式转换的
            //decimal de2 = 1.1m;
            //double d2 = 1.1;
            //float f2 = 1.1f;
            #endregion

            #region 浮点数 是可以装载任何类型的 整数的
            //f2 = l2;
            //f2 = ul2;
            #endregion

            //decimal 不能隐式存储 float和double 但是他可以隐式的存储整形

            //double——> float——> 所有整形(无符号、有符号)
            //decimal——> 所有整形(无符号、有符号)

            //整数装浮点数 整数是不能隐式存储 浮点数 因为整数不能存储小数

            #region 特殊类型和其他类型之间
            //bool 没有办法和其他类型 相互隐式转换
            //char 没有办法隐式的存储 其他类型的变量
            //char类型   可以隐式转换成 整形和浮点型

            //char隐式转换成 数据类型是

            //对应的数字 其实是一个  ASCII码
            //计算机里面存储  2进制
            //字符   中文 英文   标点符号 在计算机中都是一个数字

            //一个字符 对应一个数字  ACSII码就是一种对应关系

            //string 类型  无法和其他类型进行隐式转换
            #endregion
            #endregion

            #region 总结
            //高精度(大范围)装低精度(小范围)
            //double——> float——> 整数(无符号、有符号)——> char
            //decimal——> 整数(无符号、有符号)——> char
            //string 和 bool 不参与隐式转换规则的

            //什么情况下会出现数据类型的隐式转换?举例说明
            #endregion
        }
    }
}

1.2   练习题

using System;

namespace lesson7_隐式转换练习题
{
    class Program
    {
        static void Main(string[] args)
        {
            //将自己名字的每一个字符转换成数字并打印出来
            int h = '黄';
            Console.WriteLine(h);
            int a = '爱';
            Console.WriteLine(a);
            int l = '玲';
            Console.WriteLine(l);

        }
    }
}

2.显式转换

2.1   知识点

using System;

namespace lesson8_显式转换
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 知识点一   括号强转
            //作用 一般情况下 将高精度的类型强制转换位低精度
            //语法:变量类型 变量名 =(变量类型)变量;
            //注意:精度问题 范围问题

            //相同大类的整形
            //有符号整形
            sbyte sb = 1;
            short s = 1;
            int i = 1;
            long l = 1;
            //强转的时候 可能会出现范围问题 造成的异常
            s = (short)i;
            Console.WriteLine(s);
            //无符号整形
            byte b = 1;
            ushort us = 1;
            uint ui = 1;
            ulong ul = 1;
            b = (byte)ui;
            Console.WriteLine(b);

            //无符号和有符号
            uint ui2 = 1;
            int i2 = 1;
            //在强转的时候一定要注意范围 不然得到的结果 可能有异常
            ui2 = (uint)i2;
            Console.WriteLine(ui2);

            i2 = (int)ui2;

            //浮点和整形  浮点数 强转成 整形时 会直接抛弃小数点后面的小数
            i2 = (int)1.24f;
            Console.WriteLine(i2);

            //char和数值类型
            i2 = 'A';

            char c = (char)i2;
            Console.WriteLine(c);

            //bool和string  是不能通过 括号强转的
            bool bo = true;
            //int i3 = (bool)bo;

            string str = "123";
            //i3 = (int)str;

            #endregion

            #region 知识点二   Parse法
            //作用 把字符串类型转换为对应的类型
            //语法:变量类型.Parse("字符串");
            //注意:字符串必须能够转换成对应类型 否则报错

            //有符号
            string str2 = "123";
            int i4 = int.Parse("123");
            Console.WriteLine(i4);
            //我们填写字符串 必须是要能够转成对应类型的字符 如果不符合规则 会报错
            //i4 = int.Parse("123.45");
            //Console.WriteLine(i4);

            //值的范围 必须是能够被变量存储的值 否则报错
            short s3 = short.Parse("4000");
            Console.WriteLine(s3);

            sbyte sb3 = sbyte.Parse("1");
            Console.WriteLine(s3);
            //他们的意思是相同的
            Console.WriteLine(sbyte.Parse("1"));
            Console.WriteLine(long.Parse("123123"));

            //无符号
            Console.WriteLine(byte.Parse("1"));
            Console.WriteLine(ushort.Parse("1"));
            Console.WriteLine(uint.Parse("1"));
            Console.WriteLine(ulong.Parse("1"));

            //浮点数
            float f3 = float.Parse("1.2323");
            double d3 = double.Parse("1.2323");

            //特殊类型
            bool b5 = bool.Parse("true");
            Console.WriteLine(b5);

            char c2 = char.Parse("A");
            Console.WriteLine(c);

            #endregion

            #region 知识点三   Convert法
            //作用 更准确的将 各个类型之间进行相互转换
            //语法:Convert.To目标类型(变量或常量)
            //注意:填写的变量或常量必须正确 否则出错

            //转字符串  如果是把字符串转对应类型 那字符串一定要合法合规
            int a = Convert.ToInt32("12");
            Console.WriteLine(a);

            //精度更准确
            //精度比括号强转好一点 会四舍五入
            a = Convert.ToInt32(1.23456f);
            Console.WriteLine(a);

            //特殊类型转换
            //把bool类型也可以转成 数值类型 true对应1 false对应0
            a = Convert.ToInt32(true);
            Console.WriteLine(a);
            a = Convert.ToInt32(false);
            Console.WriteLine(a);

            a = Convert.ToChar("A");
            Console.WriteLine(a);

            //每一个类型都存在对应的 Convert中的方法
            sbyte sb5 = Convert.ToSByte("1");
            short s5 = Convert.ToInt16("1");
            int i5 = Convert.ToInt32("1");
            long l5 = Convert.ToInt64("1");

            byte b6 = Convert.ToByte("1");
            ushort us6 = Convert.ToUInt16("1");
            uint ui6 = Convert.ToUInt32("1");
            ulong ul6 = Convert.ToUInt64("1");

            float f5 = Convert.ToSingle("12.3");
            double d5 = Convert.ToDouble("13.2");
            decimal de5 = Convert.ToDecimal("13.2");

            bool bo5 = Convert.ToBoolean("true");
            char c5 = Convert.ToChar("A");
            string str5 = Convert.ToString("123123");

            #endregion

            #region 知识点四   其他类型转string
            //作用 拼接打印
            //语法:变量.Tostring();

            string str6 = 1.ToString();
            str6 = true.ToString();
            str6 = "A".ToString();
            str6 = 1.2f.ToString();

            int aa = 1;
            str6 = aa.ToString();
            bool bo6 = true;
            str6 = bo6.ToString();

            //当我们进行字符串拼接时 就会自动调用 Tostring 转成 string
            Console.WriteLine("123123" + 1 + true);

            str6 = "123123" + 1 + true + 1.23;

            #endregion

        }
    }
}

2.2   练习题

using System;

namespace lesson8_显式转换练习题
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 习题1
            //请将24069转成字符,并打印
            char c = (char)24069;
            Console.WriteLine(c);
            #endregion

            #region 习题2
            //提示用户输入姓名,语文,数学,英语成绩,并将输入的成绩用整形变量存储
            Console.Write("输入姓名:");
            string str = Console.ReadLine();

            Console.Write("输入语文:");
            str = Console.ReadLine();

            int yuwen = int.Parse(str);
            Console.WriteLine(yuwen);

            Console.Write("输入数学:");
            str = Console.ReadLine();

            int shuxue = int.Parse(str);
            Console.WriteLine(shuxue);

            Console.Write("输入英语:");
            str = Console.ReadLine();

            int ying = int.Parse(str);
            Console.WriteLine(ying);
            #endregion

        }
    }
}

你可能感兴趣的:(unity之C#入门,c#)