//1.含义:用来存储特定类型的数据格式, 变量的命名 要遵守标识符规则
//2变量的使用方式:定义变量和使用变量(赋值)
//定义变量格式: 数据类型 变量的名字;
int intNumber;
//使用变量格式 变量名 = 数据内容'
intNumber = 1;
//3.变量只能保存最新的数据内容
intNumber = 2;
//4.不允许在相同作用域出现相同名字变量的定义
// int intNumber;
//5.简写
int intNumber1 = 3;
long longNumber, longNumber2, longNumber3;
float floatNumber = 1.1f, floatNumber1 = 1.2f;
//6.局部变量 需要赋值之后才能使用
// int intNumber2;
// Console.WriteLine(intNumber2);
Console.WriteLine(intNumber);
//1.用来存储特定类型的数据格式
//2.存储不变的数据
//3.常量的分类:值类型常量 和字符串类型常量 和const 和 readOnly
//值类型常量
int intNumber10 = 10; //十进制
intNumber10 = 10;
int intNumber2 = 0X20; //十六进制
int intNumber3 = 012; //八进制
float floatNumber10 = 10.1f;
long longNumber1 = 100L;
uint uintNumber1 = 100u;
char charNumber11 = 'a';//英文
char charNumber21 = '中'; //中文
char charNumber31 = '\n'; //转义字符
char charNumber41 = '\u058F'; //Unicode编码
string stringNumber11 = "abc"; //字符串常量//const 常量
//1.const表示的常量 必须在定义时赋值
//const int constIntNumber;
//2.const表示的常量 名字要用大写
const int CONST_INT_NUMBER = 30;
//3.const常量使用场景 比如特殊的数字 特殊的符号
const double PI = 3.1415926;
//已知圆的半径为10 求圆的面积
Console.WriteLine(PI*10*10);
const string PE = "中国人";
Console.WriteLine(PE+"热爱和平");
//1.控制台输出内容
//2.内容换行
Console.WriteLine(10);
//1.控制台输出内容
//2.内容不换行
//3.没有无参方法
Console.Write(20);
Console.Write(30);
Console.WriteLine(40);
//1.只有换行功能
Console.Write('\n');
Console.WriteLine();
//1.从屏幕读取一串字符,并返回该字符串
//2.暂停当前程序,按回车键继续执行程序
string strNumber = Console.ReadLine();
Console.WriteLine(strNumber);
//1.从屏幕读取一串字符的首个字符并返回该字符对应的编码
//2.暂停当前程序,按回车键继续执行程序
int readIntNumber = Console.Read();
Console.WriteLine(readIntNumber);//1.暂停当前程序, 按任意按键继续执行程序
Console.ReadKey();
///隐式类型转换(两种类型兼容,小转大) 适用于值类型之间转换
//隐式类型转换
int number = 10;
double dNumber = number;//自动类型转换 隐式类型转换
Console.WriteLine(dNumber);
///显示类型转换(两种类型兼容,大转小):
//显示式类型转换
double d1 = 303.6;
int n = (int)d1;
///八 Parse() 适用于 string转换成值类型
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
/// Convert类型转换 适合各种类型相互转换
//万能类型转换 任意类型之间转换 但是转换的内容要符合转换后类型的标准
//否则抛出异常
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类型转换成数字类型 时 对应的是 0 和1
bool boolNumber7 = true;
int intNumber8 = Convert.ToInt32(boolNumber7);
Console.WriteLine(intNumber8);
//这种情况就无法转换
string s1 = "123abc";
int a1 = Convert.ToInt32(s);
double b1 = Convert.ToDouble(s);
/// ToString() 适合其他类型转换成字符串.
//其他类型转换成字符串类型 方式1
int intNumber9 = 100;
Console.WriteLine(Convert.ToString(intNumber9));
//其他类型转换成字符串类型 方式2
string strNumber9 = intNumber9.ToString();
Console.WriteLine(strNumber9);
//算术运算符
// + - * / %数字类型大类型和小类型结合 结果默认为大类型结果
int intNumber = 10;
int intNumber1 = 40;
long longNumber = 20;
//默认类型int
int intNumber3 = intNumber + intNumber1;
//隐式类型转换
long longNumber3 = intNumber + intNumber1;
//显示类型转换
int intNumber4 = (int)(intNumber + longNumber);
int intNumber5 = 100;
float floatNumber = 10f;
//字符串类型和字符串类型相加 拼接
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);
// 关系运算符
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;
//逻辑运算符 && || !
// && 短路 当其中一个条件为false时 后续的条件就不再判断
bool isTrue8 = (stringNumber12 == stringNumber13) && (charNumber12 == 97);
// || 短路 当其中一个条件为true时 后续的条件就不再判断、
bool isTrue9 = (stringNumber12 != stringNumber13) || (charNumber12 == 97);
//取反
bool isTrue10 = !isTrue9;
//赋值运算符
int intNumber15 = 10;
intNumber15 += 5; //变量intNumber15 自身增加5
//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();
//位运算符(了解)
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;
// 赋值运算符 = += -=
// =赋值 运算逻辑从右到左
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
//|= 按位或且赋值运算符
C# 中的运算符优先级