C#基础3(变量、常量、类型转换和运算符)

一、局部变量  

变量,通俗理解为可以变化的量,是用来存储数据的一种数据格式 ,其保证了数据的多样性。

下文中写的变量都为局部变量(局部变量 是在方法中定义变量)

局部变量使用三个步骤 

1.定义(声明)变量 

2.初始化变量   

3.使用变量


变量的作用域范围(局部变量 是在方法中定义变量)

局部变量三个步骤解释:
1.声明变量
空格在代码中作用:分割代码
变量命名规则符合标识符规则和小驼峰命名且一般不以下划线__开头
小驼峰命名规则:  首字母小写其他单词首字母大写
2.初始化变量(赋值的内容要符合数据类型)
声明过变量后不用在写数据类型
例如声明过int  nubmer;
赋值直接写nubmer=10;即可
3.使用变量(输出或进行加减乘除等都为使用变量)
使用局部变量必须赋值

4.连写,声明变量,初始化变量

 int numberTwoTest  =20;

Console.WriteLine(numberTwoTest);//连写意思为直接将三个步骤直接写完,不再声明变量,然后再赋值

5.变量在同一个作用域中,不能重复定义
6.变量定义的连写
int a,b;
a=10;
b=20;
float c=3.14f,i=3.24f;
dounle j,k=3.14;//红字部分错误k赋值3.14,但是j没有被赋值
7.变量只能保存一个值,且是最新的值(但是变量可以改变无数次)

变量存储方式


值栈引堆
栈 (堆栈系统自动管理)堆(托管堆,安全,受CLR管理)
CLR管理1.混合语言开发    2.GC内存管理(C#自动回收GC内存)


栈上存储和读取比堆上快

栈和堆是内存上面的两个区域。
栈上存储的数据量少。堆上存在的数据量大
引用类型会把数据的值存在到堆上,而在栈上存储的仅仅是一个地址(指针)

二、常量

1.常量的概念  

不可变化的值  常量的值在程序运行时就已经确定了

2.常量的分类:

值类型常量 和字符串类型常量  和const 和 readOnly   
const 静态常量  readonly只读常量

3.值常量(值类型常量)


等号右边的内容都称为常量  左边都是变量
例如int num=10;//num是变量,10是值类型常量
关键字const   表示的变量,也是一种常量
const 表示的变量必须在声明时赋值
例如:const int num=10;
const写在变量前,变量就变成了常量
一旦赋值后,常量不能被修改
例如:const int num=10;
num=12;//会报错
什么时候定义常量:对于一些特殊的值,比如颜色活着数据库连接字符串,PI的值等等,都可以用常量来表示,从而提高代码的复用性

求圆的周长
            double r = 5.0;
            double perimeter = 2 * PI * r;
            Console.WriteLine($"圆的周长{perimeter }");
 
求圆的面积
            double area = PI * r * r;
            Console.WriteLine($"圆的面积{area:F2}");

三、输出及输入

1.输出


Console.WriteLine();换行并输出数据内容,有无参形式,无参形式时只执行换行命令
Console.Write();不换行并输出数据内容,同时没有无参的形式,括号内必须写上内容


2.输入内容到控制台:


Console.Read();从标准输入流读取下一字符,返回int类型
输入内容,输出的内容为输入的第一个字符对应的ASCII或Unicode值
Console.ReadLine();从标准输入流读取下一字符
在输入完成之前,程序不会继续往下执行(即控制台输入内容不按回车,输入内容会一直输入下去,只有按回车后才继续执行下面代码)
Console.ReadLine();返回string类型
Console.Read();返回int类型

 等待用户输入任意按键 继续执行后续代码

 Console.ReadKey();

四、数据类型转换


1.值类型之间的转换


(1)、隐式转换   小转大  
例如int转为long 
int a=10;
long b=a;//隐式转换可以省略要转化的类型  
(2)、显式转换   大转小
例如long转为int
long a=20;
int b=(int)a;/显式转换不可以省略要转化的类型
(3)、为什么显式要写类型?
因为数据在转换过程中,可能会丢失精度,所以C#为了数据安全性,让程序员自行决定
(4)、bool类型转换为int 无法显式或隐式转换

        //数据类型转换 分为 1.值类型之间的转换2.引用类型之间的转换(后续讲) 3,字符串类型与值类型之间的转换
            //1. 值类型之间的转换 分为 (1).隐式类型转换 (2).显示类型转换
            //(1).隐式类型转换    小区间转换成大区间
            // 1.int类型 转换成long 类型
            int intNum = 10;
            // 隐式类型转换 int 转换成 long
            long longNum = intNum;
            //输出 longNum的类型 System.Int64
            Console.WriteLine(longNum.GetType());
            //输出 intNum的类型 System.Int32
            Console.WriteLine(intNum.GetType());
            //2.float类型转换成double类型
            float floatNum = 10.5f;
            double doubleNum = floatNum;
            //3.int类型转换成float类型
            int intNum1 = 10;
            float floatNum1 = intNum1;
            //(2).显示类型转换    大区间转换成小区间   必须在加(类型)  
            //为什么要加(类型) 因为大区间转换成小区间时,可能存在数据精度丢失。
            //1. long类型转换成int类型
            long longNum1 = 10;
            int intNum2 = (int)longNum1;
            //2..double类型转换成float类型
            double doubleNum1 = 10.111112323232323232323;
            float floatNum2 = (float)doubleNum1;
            //3.float类型转换成int类型
            float floatNum3 = 10.1111f;
            int intNum4 = (int)floatNum3;
 
 
            //补充 其他类型转换
 
 
            //扩展:
            //整数和小数类型无法直接转换成bool类型
            int intNum5 = 1;
            //  bool boolNum6 = (bool)intNum5;  // 错误 提示:无法将类型“int”转换为类型“bool”
            //bool类型无法转换成整数和小数类型
            bool bool1 = true;
            // int intNum6 = (int)bool1;  // 错误 提示:无法将类型“bool”转换为类型“int”
 
            //单字符类型转换成整数类型   属于隐式类型转换  转换成对应的ASCII码
            char charNumber1 = 'a';
            int intNum6 = charNumber1;
            Console.WriteLine(intNum6);


2.字符串类型与值类型之间的转换


1.字符串类型转换为值类型
字符串的内容与转换的值类型要符合(即转换成整数时,输入的字符串内容也要是数字字符串)
配合使用parse方法
Console.WriteLine("请输入一个字符串:");
string s=Console.ReadLine();//123  
int parseInt=int.parse(s);//123  

string s=Console.ReadLine();  //abc
int parseInt=int.parse(s);  //报错(格式错误)

Console.WriteLine("请输入一个字符串:");
string str=int.Parse(Console.ReadLine());

         string strNumber = "123";
            int intNumber4= int.Parse(strNumber);
            Console.WriteLine(intNumber4);
            long longNumber4 =long.Parse(strNumber);
            Console.WriteLine(longNumber4);
            byte byteNumber  =byte.Parse(strNumber);
            Console.WriteLine(byteNumber);
            uint uintNumber =uint.Parse(strNumber);
            Console.WriteLine(uintNumber);
            float floatNumber4  = float.Parse(strNumber);
            Console.WriteLine(floatNumber4);
            // 注意bool类型转换
            string stringNumber5 = "true";
            bool boolNumber = bool.Parse(stringNumber5);
            Console.WriteLine(boolNumber);

 int.TryParse 与 int.Parse 又较为类似,但它不会产生异常,转换成功返回 true,
转换失败返回 false。最后一个参数为输出值,如果转换失败,输出值为 0

     //尝试转换数据  如果不成功 会返回false结果 
            //成功返回 true
            int ab; //用于输出参数
            string stringNumber6 = "a12";
            bool isSuccess =  int.TryParse(stringNumber6, out ab);
            string  isSuccessStr = isSuccess?"转换成功":"转换失败";
            Console.WriteLine(isSuccessStr);
            Console.WriteLine(ab); // 转换失败结果为 0

3.Convert 类型转换适用各种类型相互转换(强转类型)


string num="123";
int num1=Convert.ToInt32(num);
string str=Console.ReadLine();
bool str1=Convert.ToBoolean(str);
bool类型转换int类型
bool a=true;
int b=Convert.ToInt32(a);//1

注意:bool类型不能直接转换成char类型

            //万能类型转换  任意类型之间转换 但是转换的内容要符合转换后类型的标准
            //否则抛出异常
            string stringNumber7 = "123";
            int intNumber7 = Convert.ToInt32(stringNumber7);
            long longNumber7 =Convert.ToInt64 (stringNumber7);
            short shortNumber7 = Convert.ToInt16 (stringNumber7);
            uint uintNumber7 = Convert.ToUInt32 (stringNumber7);
            ulong ulongNumber7 = Convert.ToUInt64 (stringNumber7);
            ushort ushortNumber7 = Convert.ToUInt16 (stringNumber7);
            float floatNumber7 = Convert.ToSingle(stringNumber7);
            double doubleNumber7 = Convert.ToDouble(stringNumber7);
                //bool类型转换整数
            bool boolNum10 = true;
            int intNum11 = Convert.ToInt32(boolNum10);
            Console.WriteLine(intNum11);
 
            //整数类型转换为bool
            int intNum12 = 1;
            bool boolNum12 = Convert.ToBoolean(intNum12);
            Console.WriteLine(boolNum12);
 
            //char类型转换整数
            char charNum10 = 'a';
            int intNum13 = Convert.ToInt32(charNum10);
 
            //整数转换成char  
            int intNum14 = 97;
            char charNum11 = Convert.ToChar(intNum14);
            //bool 无法直接转换成char类型  可以先转换成整数  然后在转换成char
            bool boolNum14 = true;
            //char charNum15 = Convert.ToChar(boolNum14);
            //Console.WriteLine(charNum15);
            //中间变量 intNum15
            int intNum15 = Convert.ToInt32(boolNum14);
            Console.WriteLine("------------------------------");
            Console.WriteLine(intNum15);
            //最后转换成char类型
            char charNum16 = Convert.ToChar(intNum15);
            Console.WriteLine("--------------------------------");
            Console.WriteLine(charNum16);
            //总结:值类型直接基本可以相互转换 但是注意内容格式


4.  .Tostring()适合其他类型转换成字符串


int a1=10;
bool b1=true;
char c1='a';
float a2=20.0f;
string s1=a1.ToString();
string s2=b1.ToString();
string s3=c1.ToString();
string s4=a2.ToString();

     其他类型转换成字符串类型  toString()
            //1.整数类型转换成字符串
            int intNum17 = 100;
            string strNum17 = intNum17.ToString();
            //2.浮点数转换成字符串
            float floatNum18 = 100.1111f;
            string strNum18 = floatNum18.ToString();
            //格式化浮点数  保留小数点位数  精度不够 补0
            string strNum19 = floatNum18.ToString("F5");
            //3.bool 类型转换字符串
            bool boolNum20 = false;
            string strNum20 = boolNum20.ToString();
            //4.char 类型转换成字符串
            char charNum21 = 'a';
            string strNum21 = charNum21.ToString();
 
            //5.时间类型转换成字符串 
            DateTime dataTime22 = DateTime.Now;
            string strNum22 = dataTime22.ToString();
            Console.WriteLine(strNum22);
            //格式化时间类型
            string strNum23 = dataTime22.ToString("HH-mm-ss");
            Console.WriteLine(strNum23);

五、运算符


1.算术运算符


+加  -减  *乘  /除  %模取余  ++自增  --自减
+求和或字符串连接
1.求和  值类型直接使用
注意:C#不支持float和decimal的运算,但是可以显式转换成decimal类型在进行计算

2.string之间拼接
保证+左右两边至少有一个字符串类型也是拼接
字符串拼接
int k=10;
string str="1";
string str1=k+str;
Console.WriteLine(str1);//101
求和
int k1=Convert.ToInt32(str);
Console.WriteLine(k+k1);//11
注意+不能在object类型之间进行运算

算术运算符代码:

  //算术运算符  
            // +  -  *  /  %数字类型大类型和小类型结合 结果默认为大类型结果
             //算术运算符  + - * / %  ++  --
 
            //1. +  功能分为求和和字符串拼接
            // 整数与整数相加  求和
            //  byte 与 byte 类型相加 
            byte intNum1 = 255;
            byte intNum2 = 255;
            //输出 byte与byte相加结果的类型   默认为int类型
            Console.WriteLine((intNum1+intNum2).GetType());
            Console.WriteLine(intNum1 + intNum2);
 
            //long与long相加  求和   结果类型为long
            long longNum1 = 255;
            long longNum2 = 200;
            Console.WriteLine((longNum1+longNum2).GetType());
 
            //int 和long 相加   结果类型为long
            long longNum3 = 100;
            int intNum3 = 100;
            Console.WriteLine((longNum3+intNum3).GetType());
 
            //uint和 int类型 相加  结果类型为long
            uint uintNum4 = 100;
            int intNum4 = -1000;
            Console.WriteLine((uintNum4+intNum4).GetType());
            //小数与小数相加 
            //1.float类型相加  结果类型为float
            float floatNum1 = 10.5f;
            float floatNum2 = 10.5f;
 
            Console.WriteLine((floatNum1+floatNum2).GetType());
            //2.double类型相加  结果类型为double
            //3.double 类型与float类型相加  结果类型为double
            //4.double与 decimal类型相加  结果类型为decimal
            //整数和小数相加   结果类型为小数
            //1.int类型与float类型相加  结果类型为float
            //2.int类型与double类型相加  结果类型为double
            //3.int类型与decimal类型相加  结果类型为decimal
            //bool与bool类型相加  错误:bool类型之间无法相加
           // bool boolNum1 = true;
           // bool boolNum2 = false;
           // Console.WriteLine(boolNum1+boolNum2);
            //char类型与char类型相加  结果为int类型  加的是单字符的ASCII码值
            char    charNum1 = 'a';
            char    charNum2 = 'b';
            Console.WriteLine((charNum1+charNum2).GetType());
            Console.WriteLine(charNum1+charNum2);
            //char类型与int类型相加  结果为int类型
            //char类型与float类型相加  结果为float类型
            char    charNum3 = 'a';
            float floatNum4 = 10.1111f;
            Console.WriteLine((charNum3+floatNum4).GetType());
            int intNum11 = 10;
            float floatNum5 = 10.1111f;
            int intNum12 =(int) (intNum11 + floatNum5);
            Console.WriteLine(intNum12);
            //扩展  结果不能超出 byte类型范围
            byte byteNum1 = 255;
            byte byteNum2 = 255;
            byte  bytetNum13 =(byte) (byteNum1 + byteNum2);
            Console.WriteLine(bytetNum13);
 
            //扩展  结果不能超出 int类型范围  超过还是int类型  建议在运算考虑好 数值的类型范围 
            int intNum13 = 2147483647;
            int intNum14 = 1000000000;
            Console.WriteLine((intNum13 + intNum14).GetType());
            int  intNum15 = intNum13 + intNum14;
            Console.WriteLine(intNum15);
           
            //字符串类型和字符串类型相加  拼接
            string stringNumber = "123";
            string stringNumber1 = "abc";
            string stringNumber2 = stringNumber + stringNumber1;
 
            //字符串类型和数字类型相加 拼接
            string stringNumber3 = "123";
            int intNumber6 = 10;
            Console.WriteLine(stringNumber3 + intNumber6);
 
            //字符串类型和数字类型其他操作 都是不允许的
            //Console.WriteLine(stringNumber3 - intNumber6);
            //Console.WriteLine(stringNumber3 * intNumber6);
            //Console.WriteLine(stringNumber3 / intNumber6);
            //Console.WriteLine(stringNumber3 % intNumber6);
 
            //单字符和数字类型
            //单字符ascii表对应的10进制数字和数字类型进行数学运算
            char charNumber = 'a';
            int intNumber7 = 10;
            //得到对应的单字符ASCII值
            int charNumber1 = (int)charNumber;
 
            Console.WriteLine(charNumber1);
            Console.WriteLine(charNumber + intNumber7);
            Console.WriteLine(charNumber - intNumber7);
            Console.WriteLine(charNumber * intNumber7);
            Console.WriteLine(charNumber / intNumber7);
            Console.WriteLine(charNumber % intNumber7);
 
 
            //++  --  
            int intNumber9 = 10;
            intNumber9++;
            ++intNumber9;
            //                      12                14             13                 13                                          
            int SumIntNumber = (intNumber9++) + (++intNumber9) - (--intNumber9) + (intNumber9--);
            //26
            Console.WriteLine(SumIntNumber);
            //12
            Console.WriteLine(intNumber9);

2.关系运算符

<小于   <=小于等于    >大于   >=大于等于    ==等于  != 不等于    

关系运算符都是二元运算符   
关系运算符运算结果为布尔值,true 或者false
关系运算符全部(<  <=  >  >=   ==   !=)可以用于值类型判断,==   !=可以用于引用类型判断

关系运算符比较看数学角度的大小关系

扩展:

关系运算符代码:

// 关系运算符 
 
            int intNumber10 = 10;
            int intNumber11 = 20;
            bool isTrue = intNumber10 < intNumber11;
            Console.WriteLine(isTrue);
            string stringNumber10 = "10";
            //字符串无法和数字类型比较
            //bool isTrue1 =  intNumber10 < stringNumber10;
            char charNumber10 = 'a';
            bool isTrue2 =intNumber10 < charNumber10;
            Console.WriteLine(isTrue2);
            // > >=  <=  同上
 
 
            // ==    !=
            int intNumber12 = 100;
            int intNumber13 = 200;
 
            bool isTrue3 = intNumber12 ==intNumber13;
            bool isTrue4 = intNumber12 != intNumber13;
 
            //字符串类型之间  ==  != 都能使用
            string stringNumber12 = "123";
            string stringNumber13 = "abc";
            char charNumber12 = 'b';
            bool isTrue5 = stringNumber12 == stringNumber13;
            bool isTrue6 = stringNumber12 != stringNumber13;
            bool isTrue7 = charNumber12 == 97;

3.逻辑运算符

逻辑运算符:   && (&)与 运算符      ||(|)或运算符       !取反

与 和 或  异或都是二元运算符

1.&&  两端的条件结果都为true 则为true   反之结果为false

例如:

 int a1=10;

 int b1=20;

 int c1=30;

 bool bool1=a1<b1;//true

bool bool2=b1<c1;//true

bool bool4=a1==c1;//false

bool bool5=bool4&&bool1//false

bool bool3=bool1&&bool2;

Console.WriteLine(bool3);//true

2.||   或运算符 两端条件只要一方结果满足true 结果就为true,反之,两端都为false,结果就为false

3.短路问题: &&短路  当一个条件为false时,后续条件就不再判断

例如10万个条件进行判断时,其中一个条件不满足就停止判断,即为&&短路。

||短路与&&短路道理一样。

4.&和| 非短路符号

5.&&的连用

bool  bool6=bool4&&bool1&&bool1&&bool2; 条件全部进行判断,结果只输出一个bool值

6.运算符的优先级比较:

运算符的连用需要判断运算符的优先级,例如:

逻辑运算符代码:

 //逻辑运算符  &&(&)  ||(|)   !   ^
            // && 短路   当其中一个条件为false时  后续的条件就不再判断    & 非短路
            bool isTrue8 =   (stringNumber12 == stringNumber13) && (charNumber12 == 97);
            // || 短路  当其中一个条件为true时  后续的条件就不再判断、    | 非短路
            bool isTrue9 = (stringNumber12 != stringNumber13) || (charNumber12 == 97);
           

8.取反! 一元运算符 取bool值反向值

取反代码:

 //取反
            bool isTrue10 =    !isTrue9;
 
           

9.异或^  二元运算符 两个条件相同时结果为false 否则为true
即两个true或两个false时结果为false,一个true一个false时结果为true

异或代码:

  // 异或  当两个布尔值相同时,结果为 false;否则,结果为 true。
   bool isTrue11 =    isTrue9 ^ isTrue8;

4.赋值运算符

1.赋值运算符:

=   +=  -=  *=   /=  %=  (&=   |= ^=  <<=     >>=)括号内的了解

2.=  赋值  执行逻辑从右到左  把右边的值赋给左边的变量


int  a2=10;将10赋值给a2 


3.+=   执行逻辑从左到右 让变量自身增加指定的值


a2+=1;//a2+=1;相等于a2=a2+1;


4.-=减等  *=乘等   /=除等  %=余等执行逻辑和用法与加等+=一样

5.         <<=    左移且赋值运算符    C <<= 2 等同于 C = C << 2
            >>= 右移且赋值运算符    C >>= 2 等同于 C = C >> 2
            &= 按位与且赋值运算符   C &= 2 等同于 C = C & 2
            ^= 按位异或且赋值运算符  C ^= 2 等同于 C = C ^ 2
            |= 按位或且赋值运算符

6.赋值运算符代码:

           //赋值运算符
            int intNumber15 = 10;
            intNumber15 += 5;  //变量intNumber15 自身增加5
 
            // 赋值运算符   =    += -= 
 
            //  =赋值  运算逻辑从右到左
            int temp1 = 10;
 
            // +=  让变量自身增加任意的数值
            int temp2 = 20;
            temp2 += 10;   // temp2 =temp2+10;
            temp2 += 1;   //temp2++;  ++temp2
 
            // -= 
            temp2 -= 5; // temp2=temp2-5;
            Console.WriteLine(temp2);
            // *=  /=  %= 同上
 
            //<<=	左移且赋值运算符	C <<= 2 等同于 C = C << 2
            //>>= 右移且赋值运算符    C >>= 2 等同于 C = C >> 2
            //&= 按位与且赋值运算符   C &= 2 等同于 C = C & 2
            //^= 按位异或且赋值运算符  C ^= 2 等同于 C = C ^ 2
            //|= 按位或且赋值运算符

5.位运算(了解)

位运算

&按位与运算   |按位或运算    ^按位异或运算  <<左移运算    >>右移运算     二进制运算
&=按位与运算  只要其中一个0,结果0,反之1(二进制中)
int  a=60;//00111100
int b=13;//00001101
int c=a&b;//00001100

按位或运算  二进制计算中只要其中一个为1,结果为1,反之0
按位异或运算 两个位置相同结果为0,反之1
按位取反运算符 取不同位置的反向,0反向1,1反向0
左移运算符 整体向左移动
右移运算符整体向右移动

 //位运算符(了解)二进制计算
            int A = 60;
            int B = 13;
            //按位与运算  只要其中一个为0 结果0 反之为1
            //A = 0011 1100
            //B = 0000 1101
            //C = 0000 1100
            int C =A & B;
            Console.WriteLine(C); 
            //按位或运算  只要其中一个为1 结果1 反之为0
            //A = 0011 1100
            //B = 0000 1101
            //D = 0011 1101
            int D = A | B;
            Console.WriteLine(D);
            //按位异或运算符   两个位置上相同 结果为0  反之为 1
            //A = 0011 1100
            //B = 0000 1101
            //E = 0011 0001
            int E = A ^ B;
 
            //按位取反运算符   取不同位置的反向 0反向1  1反向0
             //A = 0011 1100
             //F = 1100 0011
            int F = ~A;
            Console.WriteLine(F);
            //左移运算符
            //A = 0011 1100
            //G = 1111 0000 
            int G = A << 2;
            //右移运算符
            //A = 0011 1100
            //G = 0000 1111 
            int H = A >>2;

6.sizeof()返回数据类型大小
GetType()判断数据类型方式

代码展示:

//sizeof()	返回数据类型的大小。
            Console.WriteLine(sizeof(int));
            Console.WriteLine(sizeof(long));
 
              
            //判断数据类型方式 GetType()
            int intNumber16 = 10;
            long longNumber17 = 20;
            Console.WriteLine(longNumber17.GetType());
            Console.WriteLine(intNumber16.GetType());
            Console.ReadKey();


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值