c#基础知识合集03 位运算,流程控制(if)(switch)
·
位运算
-
位运算简介
- 位运算是对整数在二进制层面上进行的运算。在 C# 中,位运算直接操作整数类型(如
int、byte、short、long等)的二进制位。
- 位运算是对整数在二进制层面上进行的运算。在 C# 中,位运算直接操作整数类型(如
-
常见位运算符
按位与(&)
- 规则:对两个操作数的每一位进行比较,如果两个对应位都为 1,则结果位为 1,否则为 0。
int a = 5; // 二进制: 00000101
int b = 3; // 二进制: 00000011
int result = a & b;
// 计算过程:
// 00000101
// & 00000011
// -------
// 00000001
// 结果为1
Console.WriteLine(result);
按位或(|)
- 规则:对两个操作数的每一位进行比较,如果两个对应位中有一个为 1,则结果位为 1,只有当两个对应位都为 0 时,结果位才为 0。
int a = 5; // 二进制: 00000101
int b = 3; // 二进制: 00000011
int result = a | b;
// 计算过程:
// 00000101
// | 00000011
// -------
// 00000111
// 结果为7
Console.WriteLine(result);
按位异或(^)
- 规则:对两个操作数的每一位进行比较,如果两个对应位不同(一个为 0,另一个为 1),则结果位为 1,否则为 0。
int a = 5; // 二进制: 00000101
int b = 3; // 二进制: 00000011
int result = a ^ b;
// 计算过程:
// 00000101
// ^ 00000011
// -------
// 00000110
// 结果为6
Console.WriteLine(result);
按位取反(~)
- 规则:对操作数的-每一位进行取反,0 变 1,1 变 0。
- 快速计算方法 ~8=-8-1=-8, ~-8=-(-8)-1=7 原数的相反数减一
int a = 5; // 二进制: 00000101
int result = ~a;
// 计算过程:
// 00000101
// ~ ------
// 11111010
// 在有符号整数中,这是 -6 的补码表示
Console.WriteLine(result);
左移(<<)
- 规则:将操作数的二进制位向左移动指定的位数,右边空出的位用 0 填充。
int a = 5; // 二进制: 00000101
int result = a << 2;
// 计算过程:
// 00000101 左移2位
// ------
// 00010100
// 结果为20
Console.WriteLine(result);
右移(>>)
- 规则:将操作数的二进制位向右移动指定的位数。对于有符号整数,若为正数,左边空出的位用 0 填充;若为负数,左边空出的位用 1 填充。对于无符号整数,左边空出的位始终用 0 填充。
- 示例(有符号整数,正数):
int a = 20; // 二进制: 00010100
int result = a >> 2;
// 计算过程:
// 00010100 右移2位
// ------
// 00000101
// 结果为5
Console.WriteLine(result);
- 示例(有符号整数,负数):
int a = -20; // 二进制补码: 11101100
int result = a >> 2;
// 计算过程:
// 11101100 右移2位
// ------
// 11111011
// 结果为 -5
Console.WriteLine(result);
流程控制
-
if条件判断
基本 if 语句
- 语法:
if (条件表达式) { 语句块; } - 解释:条件表达式的结果必须是布尔值(
true或false)。如果条件表达式的值为true,则执行大括号内的语句块;如果为false,则跳过该语句块。
int num = 10;
if (num > 5)
{
Console.WriteLine("数字大于5");
}
if - else 语句
- 语法:
if (条件表达式) { 语句块1; } else { 语句块2; } - 解释:如果条件表达式为
true,执行语句块 1;否则执行语句块 2。
int num = 3;
if (num > 5)
{
Console.WriteLine("数字大于5");
}
else
{
Console.WriteLine("数字小于或等于5");
}
if - else if - else 语句
if (a > b)
{
// 满足条件执行
Console.WriteLine("a > b");
}
else if (a < b)
{
// 不满足上一个条件,满足这个条件,执行此处
Console.WriteLine("a < b");
}
else
{
// 以上条件都不满足时执行
Console.WriteLine("a = b");
}
//解释:依次判断条件表达式 1、条件表达式 2 等。
//如果条件表达式 1 为 true,执行语句块 1;
//如果条件表达式 1 为 false 且条件表达式 2 为 true,执行语句块 2;
//如果所有条件表达式都为 false,执行语句块 3。
eg:
int score = 75;
if (score >= 90)
{
Console.WriteLine("成绩等级为A");
}
else if (score >= 80)
{
Console.WriteLine("成绩等级为B");
}
else if (score >= 70)
{
Console.WriteLine("成绩等级为C");
}
else
{
Console.WriteLine("成绩等级为D");
}
分支语句嵌套
可进行多层判断,提升代码健壮性。需要先满足一个条件,再进行另一个条件的判断
eg:
int age = 110;
if (age >= 0 & age <= 120)
{
Console.WriteLine("年龄合法");
if (age >= 18)
{
Console.WriteLine("成年人!");
}
else
{
Console.WriteLine("未成年人!");
}
}
else
{
Console.WriteLine("年龄不合法");
}
switch 语句
switch (表达式)//首先计算 switch 后面括号内的表达式的值。
{
case 值1: //将该值与各个 case 后的常量值进行比较。
语句块1; //如果找到匹配的值,就执行对应的语句块,直到遇到 break 语句
break; //break 语句用于跳出 switch 语句。
case 值2:
语句块2;
break;
default: //如果没有任何 case 常量值与表达式的值匹配,则执行 default 后面的语句块
语句块3;
break;
}
//default 部分是可选的,如果没有 default 且没有匹配的 case,则 switch 语句不执行任何操作)。
int dayOfWeek = 3;
switch (dayOfWeek)
{
case 1:
Console.WriteLine("星期一");
break;
case 2:
Console.WriteLine("星期二");
break;
case 3:
Console.WriteLine("星期三");
break;
case 4:
Console.WriteLine("星期四");
break;
case 5:
Console.WriteLine("星期五");
break;
case 6:
Console.WriteLine("星期六");
break;
case 7:
Console.WriteLine("星期日");
break;
default:
Console.WriteLine("无效的星期几数值");
break;
}
if - else 和 switch 的比较
- 适用场景:
if - else:适用于各种复杂条件的判断,条件可以是任何布尔表达式,比如比较两个变量、判断字符串是否包含某个子串等。例如,判断一个数是否在某个范围内,if (num >= 10 && num <= 20)。switch:适用于根据一个变量的值进行多路分支,且变量类型通常为整数、字符、枚举等,并且case后的常量值是明确且有限的。例如,根据枚举类型的值来执行不同操作。
- 可读性和性能:
if - else:当条件判断逻辑复杂且条件表达式多样时,if - else更灵活,但过多嵌套可能导致代码可读性下降。switch:对于多路分支且条件值明确的情况,switch语句使代码结构更清晰,可读性更好。在某些情况下,switch的性能可能略优于复杂的if - else嵌套(例如,当case数量较多且分布均匀时,编译器可能对switch进行更优化的处理)。
更多推荐
所有评论(0)