一、局部变量
变量,通俗理解为可以变化的量,是用来存储数据的一种数据格式 ,其保证了数据的多样性。
下文中写的变量都为局部变量(局部变量 是在方法中定义变量)
局部变量使用三个步骤
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();

1264

被折叠的 条评论
为什么被折叠?



