一,进制
符号位 原码 反码 补码
+7 0 0000111 0000111 0000111
-7 1 0000111 1111000 1111001
1,十进制负整数转二进制
a,将十进制转为二进制,不管符号
b,对转换后的逐位取反
c,在最后一位加1
2,二进制转十进制
a,逐位取反
b,对取反后的二进制加1加负号
二,运算符
数学运算符
主要作用是进行数学运算
//假如A=21;B=10;
int A = 21,B = 10;
textBox1.Text = "A+B=" + (A + B);
textBox2.Text = "A-B=" + (A - B);
textBox3.Text = "A*B=" + (A * B);
textBox4.Text = "A/B=" + (A / B);
textBox5.Text = "A%B=" + (A % B);
自增自减
描述 | |
---|---|
B=A++ | 前置自减,先自减再使用 |
B=++A | 前置自加,先自加再使用 |
B=A- - | 后置自减,先使用再自减 |
B=- -A | 前置自减,先自减再使用 |
//假设A=10;B=0;
int A = 10;
int B;
B = A++;
textBox1.Text = "B=" + B + ";A=" + A;
B = ++A;
textBox2.Text = "B=" + B + ";A=" + A;
int a = 10;
int b;
b = a--;
textBox3.Text = "b=" + b + ";a=" + a;
b = --a;
textBox4.Text = "b=" + b + ";a=" + a;
逻辑运算符
运算符 | 描述 |
---|---|
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 |
11 | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 |
label1.Text = ((textBox1.Text == "A") && (textBox2.Text == "A")).ToString();
label2.Text = ((textBox1.Text == "A") || (textBox2.Text == "A")).ToString();
label3.Text = (!((textBox1.Text == "A") && (textBox2.Text == "A"))).ToString();
关系运算符
int A = 10;
int B = 20;
label3.Text = "(A == B)="+(A == B).ToString();
label4.Text = "(A != B)=" + (A != B).ToString();
label5.Text = "(A > B)=" + (A > B).ToString();
label6.Text = "(A < B)=" + (A < B).ToString();
位运算符
位运算符作用于位,并逐位执行操作。
运算符 | 描述 |
---|---|
& | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 |
l | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 |
~ | 二进制补码运算符是一元运算符,具有"翻转"位效果。 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 |
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 |
int a = 60;
int b = 13;
label3.Text = "(a & b)=" + (a & b).ToString();
label4.Text = "(a | b)=" + (a | b).ToString();
label5.Text = "(a ^ b)=" + (a ^ b).ToString();
label6.Text = "(~a)=" + (~a).ToString();
label7.Text = " (a << 2)="+ (a << 2).ToString();
label8.Text = " (a >> 2)="+(a >> 2) .ToString();
注意:
&和&&:
1,&和&&都表示逻辑与(and)的运算符,只有当运算符两边的结果都是true整个运算才为true
2,&&具有短路功能,如果左边表达式结果为false则右边表达式不再进行运算判断。而&则不然,不论左边表达式结果是true还是false,右边表达式仍然会进行运算判断
|和||
1,|和||都表示逻辑或(or)的运算符,运算符两边的表达式只要有一个是true整个表达式都是true
2,||具有短路功能,如果左边的表达式结果为true则右边表达式不再进行运算判断。而|则不然,不论左边表达式结果是true还是false,右边表达式都会进行运算判断
例子:
int a = 60;
int b = 13;
label9.Text ="&"+ ((a++ > 70) & (b++ < 20)).ToString() + "【a=" + a + "】【b=" + b + "】";
a = 60;
b = 13;
label10.Text = "&&"+((a++ > 70) && (b++ < 20)).ToString() + "【a=" + a + "】【b=" + b + "】";
a = 60;
b = 13;
label11.Text = "|"+((a++ > 70) | (b++ < 20)).ToString() + "【a=" + a + "】【b=" + b + "】";
a = 60;
b = 13;
label12.Text = "||"+((b++ < 20)||(a++ > 70)).ToString() + "【a=" + a + "】【b=" + b + "】";
赋值运算符
int a = 10, b = 12, c;
label4.Text = "c=a+b:c=" + (a + b);
label5.Text = "b+=a:b=" + (b += a);
杂项运算符
1,sizeof()返回数据类型(值类型)的大小。sizeof(int),将返回4
2,typeof()返回class的类型。typeof(StreamReader);
3,&返回变量的地址。&a;将得到变量的实际地址。
4,“※”变量的指针。*a;将指向一个变量。
5,?x:y-条件表达式,如果条件为真?则为x:否则为y
6,is判断对象是否为某一类型。
7,as-if(ford is car);// 检查Ford是否是Car类的一个对象。as强制转换,即使转换失败也不会抛出异常。
string str = "";
label1.Text ="bool类型的大小是:"+ sizeof(bool).ToString();
label2.Text="string类型属于"+typeof(Form)+"类";
label3.Text = "三元表达式进行对a赋值(10,8)比较大的数:a=" + (10 > 8 ? 10 : 8);
三元运算符
Exp1 ? Exp2 : Exp3;
条件运算符 ? :,可以用来替代 if…else语句。它的一般形式如下:
其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
as进行类型转换
object a="123";
label4.Text = "a原本类型是" + a.GetType().Name+ "\r\n" + "a经过as进行强转为string类型" + (a as String).GetType().Name;
//a是object,但是通过给a赋一个string类型的值,然后通过GetType方法得到其最终类型就是string