运算符是表示各种不同运算的符号,运算符和运算紧密相关
算术运算符用于对操作数进行算术运算
(1)除法运算符和模运算符
需要说明的是,尽管+、-、*和/这些运算符的意义和数学上的运算符是一样的。
但是,对于除法运算符来说,整数相除的结果也应该为整数,比如7/5和9/5的结果都为1,而不是1.4及1.8,计算结果要舍弃小数部分。
可以通过模运算符%来获得这个除法的余数。运算符%可以应用于整数和浮点类型,例如,10%3的结果为1,10.0%3.0的结果为1。
(2)自增运算符和自减运算符
在C#中,还有两种特殊的算术运算符:++(自增运算符)和
–(自减运算符),其作用是使变量的值自动增加1或者减去1。
x=x+1和x++的作用是一样的,x=x-1和x–的作用也是一样的。++(自增运算符)和–(自减运算符)都是一元运算符,**只能用于变量,而不能用于常量或表达式,**例如,12++或–(x+y)都是错误的。
自增和自减运算符可以在操作数前面(前缀),也可以在操作数后面(后缀)。例如:
++x; //前缀格式
x++; //后缀格式
static void Main(string[] args)
{
int x = 5;
int y = x++;
Console.WriteLine("y={0}", y);
y = ++x;
Console.WriteLine("y={0}", y);
Console.ReadKey();
}
赋值运算符用于将一个数据赋予一个变量,赋值操作符的左操作数必须是一个变量,赋值结果是将一个新的数值存放在变量所指示的内存空间中。
在C#中,可以对变量进行连续赋值,此时,赋值操作符是右关联的,这意味着从右向左运算符被分组。
例如,x=y=z等价于x=(y=z)。
关系用于创建一个表达式,该表达式用来比较两个对象,并返回布尔值。关系运算符就是用于在程序中比较两个对象的大小
关系运算可以和算术运算混合起来使用,此时,关系运算符两边的运算对象可以是算术表达式的值,在C#中,是先求表达式的值,然后将这些值做关系运算。例如:
4+8>6-3 //结果是true
逻辑运算符用于表示两个布尔值的逻辑关系,逻辑运算结果是布尔类型
逻辑与 有0为0 有假为假
逻辑或 有1为1 有真为真
逻辑非的优先级最高,逻辑与的优先级高于逻辑或。
位运算是指二进制位的运算,每个二进制都是由0或1组成,进行位运算时,依次取运算对象的每一个位,进行位运算。
左移位运算将各个位向左移动指定的位数,舍弃移出的位,并在右边用0填充。右移位运算将各个位向右移动指定的位数,舍弃移出的位,并在左边用0填充。
按位与运算通过逐位执行逻辑AND的计算。按位或运算通过逐位执行逻辑OR的计算。
按位异或运算通过逐位执行XOR计算,即两个操作数相同时,结果为0,两个操作数不相同时,结果为1。
条件运算符由“?”和“:”组成,条件运算符是一个三元运算符。条件运算符的一般格式为:
操作数1? 操作数2:操作数3
其中操作数1的值必须为布尔值。进行条件运算时,首先判定“?”前面的布尔值是true还是false,如果是true,则条件运算表达式的值等于操作数2的值;如果是false,则条件运算表达式的值等于操作数3的值。
(1)is运算符。is运算符用于检查表达式是否指定的类型,如果是,结果为true,否则结果为false。
int i = 22;
bool isInt = i is int; //isInt = true
(2)sizeof运算符。sizeof运算符获得值类型数据在内存占用的字节数。
运算的结果是一个整数,此整数代表字节数。例如:
int i = sizeof(int); //结果为i = 4。因为每个int型变量占用4个字节
(3)new运算符。new运算符用于创建对象和调用对象的构造函数。
(4)typeof运算符。typeof运算符用于获得类型System.Type对象。
(5)checked和unchecked运算符。这两个运算符用于控制整数算术运算中当前环境的溢出情况。
Checked:结果溢出,出现错误。
Unchecked:结果溢出出现错误,但是忽略错误。
表达式是类似于数学运算中的表达式,是由运算符、操作数和标点符号按照一定的规则连接而成的式子。
根据运算符类型的不同,表达式可以分为算术表达式、赋值表达式、关系表达式、逻辑表达式以及条件表达式等。
表达式在经过一系列运算后得到一个结果,这就是表达式的结果。结果的类型由参加运算的操作数据的数据类型决定。
在包含多种运算符表达式求值时,如果有括号,先计算括号里面的表达式。
在运行时各运算符执行的先后次序由运算符的优先级别和结合性确定。先执行运算优先级别高的运算,然后执行运算优先级别低的。
练习
static void Main(string[] args)
{
//练习1:有个叫路飞的人在海军总部旅店登记的时候前台让他填一张表,这张表的里的内容要存到电脑上,有姓名、年龄、邮箱、家庭住址,工资.之后把这些信息显示出来
// 我叫蒙奇.D.路飞,我住在风车村,我今年16了,我的邮箱是[email protected],我的工资20000.
string strName = "蒙奇.D.路飞";
string strAddress = "风车村";
int intAge = 16;
string strEMail = "[email protected]";
double doubleWage = 20000;
Console.WriteLine("我叫{0},住在{1},今年{2}了,我的邮箱是{3},我的工资{4}.", strName, strAddress, intAge, strEMail, doubleWage);
Console.ReadKey();
namespace _02
{
class Program
{
static void Main(string[] args)
{
//定义一个变量存储一个人的年龄(18),然后发现这个人的年龄不是18岁,要把这个人的年龄修改成81岁(本题体会变量可以被重复多次赋值);
//最后把这个人的年龄输出到屏幕上?
int intAge = 18;
Console.WriteLine("我的年龄是{0}岁,我还很年轻!", intAge);
intAge = 81;
Console.WriteLine("不好意思,装嫩失败,我的年龄是{0}岁!", intAge);
Console.ReadKey();
}
}
}
namespace _03
{
class Program
{
static void Main(string[] args)
{
//定义四个变量,分别存储一个人的姓名、性别(Gender)、年龄、电话(TelephoneNumber)。
//然后打印在屏幕上 (我叫X,我今年 X岁了,我是X生,我的电话是XX)(电话号用什么类型,如:010-12345)
string strName = "张三";
int intAge = 18;
char charSex = '男';
double Telephone = 15698741235;
Console.WriteLine("我叫{0},我今年{1}了,我是{2}生,我的电话是:{3}。", strName, intAge, charSex, Telephone);
Console.ReadKey();
}
}
}
namespace _05
{
class Program
{
static void Main(string[] args)
{
//练习5:定义两个变量如:number1,number2分别赋值为10和5,写程序交换两个变量的值(两种方法都掌握)
int intNumber1 = 5;
int intNumber2 = 10;
int intNumber;
Console.WriteLine("第一个数是{0},第二个数是{1}", intNumber1, intNumber2);
第一种方法:直接重新赋值
//intNumber1 =10;
//intNumber2 = 5;
//Console.WriteLine("第一个数是{0},第二个数是{1}", intNumber1, intNumber2);
//第二种方法:
intNumber = intNumber1;
intNumber1 = intNumber2;
intNumber2 = intNumber;
Console.WriteLine("我把两个数进行交换,交换后的结果为:");
Console.WriteLine("第一个数是{0},第二个数是{1}", intNumber1, intNumber2);
Console.ReadKey();
}
}
}
namespace _06
{
class Program
{
static void Main(string[] args)
{
//练习6:下面代码的输出结果是什么?本题重点理解除法运算和求模运算
int a = 10, b = 3;
int m= a % b;
double q = a / b;
Console.WriteLine(m);
Console.WriteLine(q);
Console.ReadKey();
}
}
}
namespace _07
{
class Program
{
static void Main(string[] args)
{
//编程实现计算几天(如46天)是几周零几 天.
int intDays;
int intWeeks;
int intDay;
Console.WriteLine("请输入一个天数:");
intDays = Convert.ToInt32(Console.ReadLine());
intWeeks = intDays / 7;
intDay = intDays % 7;
Console.WriteLine("输入的天数是{0}周零{1}天",intWeeks,intDay);
Console.ReadKey();
}
}
}
namespace _08
{
class Program
{
static void Main(string[] args)
{
//编程实现107653秒是几天几小时几分钟几秒?
int intAllSecond = 107653;
int intDay,intHour,intMinute,intSecond;
const int intSecondofDay = 24 * 60 * 60;
const int intSecondofHour = 60 * 60;
intDay = intAllSecond / intSecondofDay;
intHour = (intAllSecond - intDay * intSecondofDay) / intSecondofHour;
intMinute = (intAllSecond - intDay * intSecondofDay-intHour*intSecondofHour) /60 ;
intSecond = intAllSecond % 60;
Console.WriteLine("107653秒是{0}天{1}小时{2}分钟{3}秒", intDay, intHour, intMinute, intSecond);
Console.ReadKey();
}
}
}