变量
- byte 8bit
- int 32bit
- short 16bit
- long 64bit
- ushort 16 无符号
- uint 32bit
- ulong 64bit
- float
- float fl
- fl = 10.0f
- double
- decimal 货币类型
- char 键盘, 不能为空, 单引号
溢出
byte a;
a = 1000; 变量溢出
数据类型转换
1. 整数与浮点数
- 小进大 int 自动转换
- 大进小需要进行强制转换
// 牵扯到一个变量名称问题
// CTS: Common Title Syetem
// int 会自动转化成 Int32
// 所以 int a 和 Int32 a 都可以用来生成变量
int.Parse
Convert.ToInt32(s)
数据类型 转化成通用变量
2. 字符串与其他类型转换
- 跟上面一样
基本运算
移位运算
int a = 5;
b = a >> 2;
- 首先把 a 转换成 2 进制, 可以得到 a=101
- 把 101 右侧看成一堵墙, 即 101|
- 往右移位就把整体往右移动两位
- 整体变为 1|01, 只读取墙左边的数值
- 最后 a 变为 1
b = a << 2; // 10100 => 20
== 和 Equals 的区别
- 实际上字符串就是一串字符的数组
String a = new String(new char[]{'a','b','c'});
String b = new String(new char[]{'a','b','c'));
// a == b 是错误的 因为 a 和 b 的地址不一样. (验证后发现都是对的)
// a.Equal(b) 是对的
疑问(未解决)
#region == 和 Equals 的区别
String a = new string(new char[] { 'a' });
String b = "a";
Console.WriteLine(a == b);
Console.WriteLine(a.Equals(b));
#endregion
// 输出都是 true
循环
for 循环
for(int i = 0; i < 10; i++){
}
// 里面的执行顺序是转圈 i<10 -> {} -> i++ -> i<10 -> {} ->...
foreach 循环
- 迭代只读
- 效率比 for 要高
foreach (int item in scores) {
item += 10; // 不合法
}
数组
- 二维数组初始化
int[,] a = new int[3,4];
a[2,2] = 10;
// 数组长度
a.Getlength(0) // 一维长度
a.Getlength(1) // 二维 长度
字符串
- 字符串初始化
String s1 = "abc";
String s2 = new String(new char[]{'a','b','c'});
- 字符串方法
s1.CompareTo(s2) // 如果是 0, 就是相等.
s1.Equals(s2) // 相等 true, 区分大小写.
s1 = s1.Trim() // 去掉空格.
s1 = s1.ToUpper() // 大写
s1 = s1.ToLower() // 小写
s1 = s1.Replace('a','c') // c 把 a 换了
s1 = s1.Substring(2); // 从 2 往后截取
s1 = s1.Substring(2,3) // 从 2 往后截取 3 个长度.
String[] s1 = s2.spit(''); // 以参数为分割, 返回到字符串数组里.
int index = s1.IndexOf(" ") // 定位
- 字符串拼接的效率
s += a; // 效率低
StringBuilder sb = new StringBuilder();
sb.Append("a"); // 效率高