数据类型
1.1数据类型作用
规范了对于不同的数据所采用的的存储方式,存储空间等信息不同,计算机存储不同数据其读取速度也有区别
1.2数据类型分类
1.2.1值类型
- 什么是值类型:在计算机内存中声明一个值类型变量,则直接在其变量名所指向的位置内存栈空间中存储其值
- 在调用时,直接通过变量名找到内存栈的位置即可获取到存储的数据结果
- 值类型直接存储其值,可以直接改变其值
- 调用速度快,但是存储空间小
- 内存栈:先进后出
- 15种数据类型除过string和object全部都是值类型、结构、枚举…
1.2.2引用类型
- 什么是引用类型:在计算机内存中声明一个引用类型变量,则在内存堆中开辟一个空间存储其数据,同时在内存栈中开辟一个空间存储堆数据空间位置的坐标指针
- 在调用时,直接通过变量名先找到内存栈中的数据,这个数据是一个内存堆的位置指针数据,然后计算机再根据这个指针数据在内存堆中获取存储的数据结果
- 引用类型栈中存储其地址,堆中存储其数据,所以引用类型声明之后则值无法改变,改变方式是重新在堆中开辟一个新的内存空间存储值,然后栈中的存储新的空间地址
- 调用速度慢,但是存储空间大
- string、object、类、接口…
数据类型转换
2.1数据类型转换的必要性
- 在不同的场合下需要使用同一种数据的不同类型
- 属性赋值的必要
- 两个数据之间要进行一定的处理,此时务必保证两个数据类型一致
2.2警告
报错是指,程序在未执行之前,通过IDE初步编译发现其语法有明显的错误,这时会对代码使用红色波浪线做出错误提示
警告是指,程序在未执行之前的初步编译过程中并未发现语法有明显错误,只是预测这个代码在执行过程中有可能会出错,提出的一个绿色波浪线警告标志
目前的警告是告诉我们比较运算符"=="左右两边的数据类型应该要保持一致才能更好的比较
2.3数据类型转换方式
-
隐式转换
计算机自己能够根据目前情况下所需的数据类型将数据直接转成目标类型
object o = “asd”; -
显示转换(强制转换)
计算机自己无法完成将数据转成目标类型,需要使用一些强制手段处理数据转成目标类型string str = (123).ToString();
2.4显示转换方式
-
ToString方法:C#中的所有对象都有一个基础方法ToString,这个方法的作用是将之前的数据直接转为string类型
-
Parse方法:所有的数字类型都有一个Parse方法,这个方法的作用是将纯数字字符串转成对应的数字类型
int num1 =int.Parse(textBox1.Text);
但是Parse方法需要注意:要转换的字符串必须是纯数字类型字符串否则转换会报错 -
Convert对象:这个对象有一系列方法,作用是将任意数据类型转换为方法所指定的数据类型
bool b = Convert.ToBoolean(“true”);
但是这种转换也有可能失败! -
数据之前括号指定数据类型
(char)r.Next(97, 123)
将随机出来的十进制整数转成其对应的ASCII码字符 -
as:as关键字将之前的数据类型转换为as之后指定的数据类型
2.5数据类型转换实质
- 装箱
将值类型转换成引用类型这个过程 - 拆箱
将引用类型转换成值类型的这个过程,前提是先装箱
ASCII码
3.1什么是ASCII码
ASCII码是一种字符集,这种字符集是通过使用数字对计算机键盘上的每个字符做一个代表
3.2ASCII码表
运算符
运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。
4.1数学运算符
4.1.1分类
下表显示了C#支持的所有算术运算符。假设变量A的值为10,变量B的值为 20;
运算符 描述 实例
-
把两个操作数相加 A + B 将得到 30
-
从第一个操作数中减去第二个操作数 A - B 将得到 -10
-
把两个操作数相乘 A * B 将得到 200
/ 分子除分母 B / A 将得到 2
% 取模运算符,整除后的余数 B % A 将得到 0
++ 自增运算符,整数值增加 1 A++ 将得到 11
– 自减运算符,整数值减少 1 A-- 将得到 9
4.1.2特殊情况
-
"+"运算符的作用:
符号两边的数据类型都是数字类型数据则起到数学相加作用
int A = 20;
int B = 30;
textBox1.Text = (A + B).ToString();
符号两边数据其中一个是字符串类型则起到字符串连接作用
string str = “你好”;
bool b = false;
textBox2.Text = str + b; -
"/"运算符
如果符号两边的数据类型都是整数类型,则这个符号是取整符号
int i = 3;
int j = 2;
textBox1.Text = (i / j).ToString();
如果符号两边至少有一个类型是浮点型,则这个符号是除号
int h = 3;
double k = 2;
textBox2.Text = (h / k).ToString();
4.1.3自加自减
假设变量A的值为10
描述 结果
B=A++ 后置自加,先使用再自加 B=10;A=11
B=++A 前置自加,先自加再使用 B=11;A=11
B=A-- 后置自减,先使用再自减 B=10;A=9
B=–A 前置自减,先自减再使用 B=9;A=9
int A = 10;
int B;
B = A++;
textBox1.Text = "B=" + B + ";A=" + A;
B = ++A;
textBox2.Text = "B=" + B + ";A=" + A;
4.2位运算符
位运算符作用于位,并逐位执行操作。&、 | 和 ^ 的真值表如下所示:
p q p&q p|q p^q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1
下表列出了C#支持的位运算符。假设变量A的值为60,变量B的值为13,则
运算符 描述 实例
& 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 (A&B)得到的结果是12
| 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 (A&B)得到的结果是61
^ 如果存在于其中一个操作数中但不同时存在于两个操作数中, 二进制异或运算符复制一位到结果中。 (A ^ B) 将得到 49
~ 二进制补码运算符是一元运算符,具有"翻转"位效果。 (~A ) 将得到 -61
<< 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 A << 2 将得到 240
二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 A >> 2 将得到 15
4.3逻辑运算符
下表显示了C#支持的所有逻辑运算符。假设变量A为布尔值true,变量B为布尔值false,则:
运算符 描述 实例
&& 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 (A && B) 为假。
|| 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 (A||B)为真
! 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为 假。 !(A&&B) 为真。
逻辑运算符注意问题
4.3.1&和&&
-
&和&&都表示逻辑与(and)的运算符,只有当运算符两边的结果都是true整个运算才为true
-
&&具有短路功能,如果左边表达式结果为false则右边表达式不再进行运算判断。而&则不然,不论左边表达式结果是true还是右边表达式仍然会进行运算判断
int a = 60;
int b = 30;
if ((a++)<60&&(b++)>30)
{
textBox3.Text=“结果为true”;
}
textBox1.Text = a.ToString();
textBox2.Text = b.ToString();int a = 60; int b = 30; if ((a++)<60&(b++)>30) { textBox3.Text="结果为true"; } textBox1.Text = a.ToString(); textBox2.Text = b.ToString();
4.3.2|和||
- |和||都表示逻辑或(or)的运算符,运算符两边的表达式只要有一个是true整个表达式都是true
- ||具有短路功能,如果左边的表达式结果为true则右边表达式不再进行运算判断。而|则不然,不论左边表达式结果是true还是,右边表达式都会进行运算判断
作业
- 完成计算器,运算符至少8种