lesson 14 位运算符
//位运算符 主要用数值类型进行计算的
//将数值转换为2进制 再进行位运算
知识点一 位与 &
//规则 连接两个数值进行位计算 将数值转为2进制
//对位运算 :有0则0
int a = 1; //001
int b = 5; //101
// 001
// & 101
// 001 = 1
int c = a & b; //1
Console.WriteLine(c);
a = 3; // 011
b = 19; //10011
// 00011
// & 10011
// 00011 = 3
c = a & b; //3
Console.WriteLine(c);
//多个数值进行位运算 没有括号时 从左到右 依次计算
a = 1; //001
b = 5; //101
c = 19; //10011
// 00001
// & 00101
// 00001
// & 10011
// 00001
int d = a & b & c; //1
Console.WriteLine(d);
a = 1; //001
b = 2; //010
Console.WriteLine(a & b); //0
// 001
// & 010
// 000
知识点二 位或 |
// 规则 连接两个数值进行位计算 将数值转为2进制
// 对位运算 :有1则1
a = 1; //001
b = 3; //011
c = a | b;
// 001
// | 011
// 011
Console.WriteLine(c); //3
a = 5; //101
b = 10; //1010
c = 20; //10100
// 00101
// | 01010
// 01111
// | 10100
// 11111 =16+8+4+2+1=31
Console.WriteLine(a | b | c);
知识点三 异或 ^
// 规则 连接两个数值进行位计算 将数值转为2进制
// 对位运算 :相同为0 不同为1
a = 1; //001
b = 5; //101
// 001
// ^ 101
// 100 =4
c = a ^ b;
Console.WriteLine(c);
a = 10; //1010
b = 11; //1011
c = 4; //100
// 1010
// ^ 1011
// 0001
// ^ 0100
// 0101 =5
Console.WriteLine(a ^ b ^ c);
知识点四 位取反 ~
// 规则 写在数值前面 将数值转为2进制
// 对位运算 0变1 1变0
a = 5; //0101
// 0000 0000 0000 0000 0000 0000 0000 0101
// ~ 1111 1111 1111 1111 1111 1111 1111 1010 =-6
// 反码补码知识
c = ~a;
Console.WriteLine(c);
知识点五 左移 << 和 右移 >>
// 规则 让一个数的2进制数进行左移和右移
// 左移几位 右侧加几个0
a = 5; //101
c = a << 5; //左移5位,右侧加5个0
// 1位 1010
// 2位 10100
// 3位 101000
// 4位 1010000
// 5位 10100000 = 32 + 128 = 160
Console.WriteLine(c);
// 右移几位 右侧去掉几个数
a = 5; //101
c = a >> 2;
// 1位 10
// 2位 1
Console.WriteLine(c); //1
lesson 15 三目运算符
知识点一 基本语法
//套路 :3个空位 2个符号
//固定语法 :空位 ?空位 :空位;
//关键信息 :bool类型 ? bool类型为真返回内容 :bool类型为假返回内容;
//三目运算符 会有返回值,这个返回值类型必须一致,并且必须使用!
知识点二 具体使用
string str = false ? "条件为真" : "条件为假";
Console.WriteLine(str);
int a = 5;
str = a < 1 ? "a小于1" : "a不满足条件";
Console.WriteLine(str);
int i = a > 1 ? 123 : 321;
//第一个空位 始终是结果为bool类型的表达式(bool变量、条件表达式、逻辑运算符表达式
//第二、三个空位 什么表达式都可以(只要保证他们的结果类型是一致的)
bool b = a > 1 ? a > 6 : false;
练习
//要求用户输入一个年份,然后判断是不是闰年
//闰年判断条件:
//年份能被400整除
//或者
//年份能被4整除,但不能被100整除
try
{
Console.WriteLine("请输入一个年份:");
string str4 = Console.ReadLine();
int i5 = int.Parse(str4);
Console.WriteLine((i5 % 400 == 0 || i5 % 4 == 0 && i5 % 100 != 0) ? "该年份为闰年" : "该年份不是闰年");
}
catch
{
Console.WriteLine("输入错误!");
}