变量定义
定义:变量类型,变量名, int a = 0; 先声明再使用 见名知意
小驼峰命名法,只能以字母@_开头不能与关键字重复,相同作用域不能定义两个相同变量名
声明在方法中的局部变量没有初始值,未赋值的变量不可使用。
//声明变量
int a;
//初始化变量
a = 8;
//声明并初始化
int b = 9;
//类型相同简写
int c,d,e;
c = 6; d = 5; e = 4;
常量
存储不变的数据,常量中的命名需要全部大写。
使用const 关键字定义的常量,声明的时候必须要初始化赋值,并且只能赋一次值,不可更改。
常量分为:值类型常量,字符串类型常量,const关键字常量,readonly字段常量
//值类型常量 都有不可变的具体的值
int intNumber = 10;//二进制
int intNumber2 = 0X20//十六进制
float floatNumber = 1.1f;
long longNumber = 100L;
//字符串常量
string strNumber = 'abc';
//const关键字常量 名字大写 声明初始化一起,不可更改
const decimal PI = 3.1415926m;
//readonly字段常量 设置当前字段为只读 只能作为字段 不能作为局部常量 可以在声明时初始化,也可以在构造函数中初始化
readonly static int ReadOnlyInt = 100;
输出与输入
Console.WriteLine(); //输出字符到控制台并换行
Console.Write(); //必须要有值 并且不换行
Console.ReadLine(); //返回string类型的值 可以暂停程序
Console.Read(); //返回第一个字符的编码 可以暂停程序
Console.ReadKey();//暂停程序
数据类型转换
隐式类型转换:低精度到高精度都有隐式类型转换
int number = 10;
double number1 = number; //自动类型转换
int n = 10;
long l = n;
显式类型转换:高精度转低精度,要强制类型转换,会丢失精度
double d = 300.29d;
int i = (int)d;
Parse() 适用于string转换成值类型
string str = "123";
int IntNumber = int.Parse(str); //只能转数字类型的字符串或 bool 类型的字符串
long longNumber = long.Parse(str);
byte byNum = byte.Parse(str)
//int.TryParse与int.Pares相似,但它不会产生异常,转换成功返回true失败返回false
//最后一个参数为输出值,如果转换失败输出值为0
int ab; //用于输出参数
string str = "a12";
bool isSuc = int.TryParse(str,out ab);
string isSucStr = isSuc?"转换成功":"转换失败";
//Convert类型转换,适用各种类型的转换
//万能转换 如果无法转化就抛出异常
string str = "123";
byte bystr = Convert.ToByte(str4);
Console.WriteLine(str4); // 123
sbyte sbystr = Convert.ToSByte(str4);
Console.WriteLine(sbystr);// 123
short shostr = Convert.ToInt16(str4);
Console.WriteLine(shostr);// 123
//......
//bool类型转换,转换为数字类型时是0和1
bool boNum = true;
int boInt = Convert.ToInt32(boNum);
Console.WriteLine(boInt); // 1
//字符串太长或字母数字混合无法转换
string str5 = "123abc";
int inzm = Convert.ToInt32(str5);
Console.WriteLine(inzm);// 抛出异常
运算符
优先级: 有括号先括号,后乘除再加减,然后位移再关系,逻辑完后条件,最后一个逗号
后缀 | () [ ] -> . ++ - - |
一元 | ++ -- ! ~ + - |
乘除 | * / |
加减 | + - |
移位 | << >> |
关系 | < <= > >= |
相等 | == != |
位与AND | & |
位异或XOR | ^ |
位或OR | | |
逻辑与 AND | && |
逻辑或 OR | || |
条件 | ? : |
赋值 | = += -= *= /= %= &= ^= |= <<= >>= |
逗号 | , |
算数运算符 数字类型大类型和小类型结合 结果默认是大类型结果
int intNum = 10;
int intNum2 = 30;
long longNum = 20;
//默认int类型
int ilNum = intNum * intNum2;
Console.WriteLine(ilNum);
//默认隐式转换
long liNum = longNum * intNum2;
Console.WriteLine(liNum);
//显示类型转换(强制转换)
int ilNum1 = (int)longNum + intNum;
Console.WriteLine(ilNum1);
//字符串字符串相加执行拼接逻辑
string str6 = "123";
string str7 = "abc";
string _str = str6 + str7;
Console.WriteLine(_str);//123abc
//字符串类型和数字类型也执行拼接逻辑
string str8 = "456";
int int8 = 10;
Console.WriteLine(int8 + str8);
单字符类型和数字类型 单字符ascii表对应的10进制数字和数字类型学进行数运算
char charNum = 'a';
int intNum9 = 10;
int chin = (int)charNum;
Console.WriteLine(chin); // 97
Console.WriteLine(charNum + intNum9); // 107
Console.WriteLine(charNum - intNum9); // 87
Console.WriteLine(charNum * intNum9); // 970
Console.WriteLine(charNum / intNum9); // 9
Console.WriteLine(charNum % intNum9); // 7
// ++ -- 自增 自减 加加减减 在前先自增自减1 在后的话等本段代码执行完分号后 再自增或自减 在下一行代码可以查看
int intNum10 = 10;
intNum10++;
++intNum10;
//二义性错误
long l8 = 88;
ulong ul8 = 88;
// Console.WriteLine(l8 + ul8);
关系运算符
//关系运算符 < · > · <= · >= · == · !=
int a = 1;
int b = 2;
bool c = a > b;
Console.WriteLine(c); // false
bool d = a < b;
Console.WriteLine(d); // true
bool e = a >= b;
Console.WriteLine(e); // false
bool f = a <= b;
Console.WriteLine(f); // true
bool g = a == b;
Console.WriteLine(g); // false
bool h = a != b;
Console.WriteLine(h); // true
字符串关系用法
1.字符串不能使用 < > <= >= 如果要使用需要重载运算符
2.字符串能使用 == != 比较两个字符串的内容是否相同
3.值类型和字符串类型不能直接使用关系运算符
string str = "123";
string str1 = "456";
//bool inTrue = str > str1;
bool isTrue10 = string1 == string2;
bool isTrue11 = string1 != string2;
Console.WriteLine(isTrue10);
Console.WriteLine(isTrue11);
int intNumber = 100;
string stringNumber = "100";
// bool isTrue12 = intNumber == stringNumber;
逻辑运算符
逻辑与 && 逻辑或 || 取反 !
//逻辑与 &&
//如果有一个条件为false 结果就是false,如果判断到false,会执行短路运算,后续条件不再判断,直接返回false
bool yesTrue = false;
bool yesTrue1 = true;
bool yesTrue2 = false;
Console.WriteLine(yesTrue ? "可以出去玩" : "不可以出去玩");
Console.WriteLine(yesTrue1?"去公园":"去爬山");
//逻辑或 || 只要判断条件中有true,结果就是true ,碰到true执行短路运算,后续不在判断,结果就是true
Console.WriteLine(yesTrue || yesTrue1? "杀小日本":"操小日本");
Console.WriteLine(yesTrue || yesTrue2? "轰死小日本":"小鬼子吾日汝母乎");
//取反 !
Console.WriteLine($"原本是false取反后为:"+!yesTrue);
Console.WriteLine(!yesTrue);
Console.WriteLine(!(yesTrue && yesTrue1 && isTrue6)?"出去玩":"不去玩");
//先算括号内的两个取反为!(true || false) 再算外面的(true || false) 根据逻辑或运算可知只要有一个true结果就是true所以 输出上学
Console.WriteLine(!yesTrue || !(!yesTrue2||!yesTrue1)?"上学":"上班");