C# 编程语言学习系列(三)

孤帆去悠悠 2021-12-08 11:30:54 浏览数 (2788)
反馈

前面学习了 C# 的变量以及数据类型,也简单地提及当用户输入的时候,如何来转换数据类型。下面,将主要学习关于 C# 类型转换的内容。在此之前,先插入一个知识点,常量。

一、常量

变量,是一个在程序执行期间,它的值是可以改变的。与之相反的,在程序运行期间,不能改变值的,那就是常量。

常量的定义

常量是通过 const 关键字来定义的,定义一个常量的语法如下:

const <datatype> <constantname>;

// 例如
const int num;
const char word;

num = 233;
word = 'c';

const string str = "hahahaha!";
const float f = 3.22f

常量和变量相似的是,一样都可以先定义常量(变量)的数据类型,然后再给他赋值。也可以在定义数据类型的时候,直接赋值。

不同的是,变量在第一次赋值后,在后面如果想要改变变量值,可以通过 = 赋值运算符,直接赋予想要的值。然而常量不行,在第一次赋值后,就不能反复赋值。

二、运算符

C# 中有许多丰富的内置运算符,例如:

(1)算术运算符

(2)关系运算符

(3)逻辑运算符

(4)位运算符

(5)赋值运算符

(6)其他运算符

1、算术运算符

算术运算符,顾名思义,就是用来进行算术计算的运算符。

int a = 123;
int b = 26;
int c;
// 加法
c = a + b; // 149
// 减法
c = a - b; // 97
// 乘法
c = a * b; // 3198
// 除法
c = a / b; // 4
// 取余
c = a % b; // 19
// 自增
c = ++a; // c=124;a=124
// 自减
c = a--; // c=123;a=122

(1)如果是两种不同数据类型进行计算,那么就需要考虑到数据类型之间的是属于显式转换还是隐式转换。

(2)如上面的程序,两个整型的值(a和b)相除,那么 c 无论是整型类型的或者浮点类型的,结果都只会是一个整数。这一点可以想象为是两数相除取整数。

(3)自增自减分别各有两种表示方法

c=a++/c=a–或者c=++a/c=–a

这两种表示方法表示意思也不一样。前者是先将 a 的值赋予 c,然后在对 a 进行加减运算;后者则是先对 a 进行加减运算,运算结束后的 a 的值在赋予变量 c。

2、关系运算符

将两个值或者两个运算式进行关系比较的运算符。经常是被使用在条件判断语句里面。进行比较之后获得的值一定是布尔值类型,要么为True,要么为False。

int a = 31;
int b = 13;
bool c;
// 相等 ==
c = a==b; // false

// 不等 !=
c = a!=b; // true

// 大于 > && 大等于 >=
c = a>b; // true
c = a>=b; // true

// 小于 < && 小等于 <=
c = a<b; // false
c = a<=b; // false

3、逻辑运算符

逻辑运算符就是将两个或者多个的关系式关联在一起,判断最终为 true 或者 false。逻辑运算符一般是和关系运算符一起使用,经常被用在条件判断语句中。

(1)&& - 逻辑与运算符,只有所有关系式的值都是 true,返回的结果才会是 true;只要有一个是 false,那么这个式子就是 false。

(2)|| - 逻辑或运算符,只要所有关系式中有一个是 true,返回的结果为 true;只有全部为 false, 整个式子才会是 false。

(3)! - 逻辑非运算符,关系式为 true,结果就为 false;反之,关系式为 false,结果就为 true。

bool a = true;
bool b = false;
bool c;
c = a && b; // false
c = a || b; // true
c = !a; // false
c = !b; // true

4、位运算符

位运算符作用于位,并逐位执行操作。

那什么是位?

计算机中的计量单位,有KB、MB、GB等等,而最基本的计量单位则是字节(Byte),一个字节又是由 8 个比特(bit)组成的。而这个比特就是位,位的值只有 0 或 1。所以,位(bit)是计算机中最小的数据单位。

位运算符

int a = 60; // 0011 1100
int b = 13; // 0000 1101

(1)&

将 A 和 B 的二进制值一位一位的比较,如果该位同为 1,结果 C 中的对应位置就为 1;否则就为 0.

int c = a&b; // 12	0000 1100

(2)|

也是将 A 和 B的二进制进行逐位比较,如果该位同为 0,结果 C 中的对应位置就为0;否则为 1.

int c = a|b; // 61	0011 1101

(3)^

比较两位数的二进制,如果该位一边是 1,另一边是0,则返回结果 C 的对应位置为1;其他都为 0.

int c = a^b; // 49	0011 0001

(4)~

取反符号,即对 A 的二进制进行翻转,为 0 的位为 1;为 1 的位为0.

int c = ~a; // -61	1100 0011

(5)<<

表示向左移动右操作数指定的位数。

int c = a << 2; // 240	1111 0000

(6)>>

表示向右移动右操作数指定的位数。

int c = a << 2; // 15	0000 1111

5、赋值运算符

将右边的操作数赋给左边的操作数,可以和算术运算符或者位运算符进行关联使用。

int a = 30;
int b = 21;

(1)=

这是最常见,也是最常用的,最简单的赋值运算符。将右边的值赋给左边。

b = a; // b = 30;

(2)+=、-=、*=、/=、%=

将算术运算符和赋值运算符进行关联使用。

a += b; // a = a + b = 51;
a -= b; // a = a - b = 9;
a *= b; // a = a * b = 630;
a /= b; // a = a / b = 1;
a %= b; // a = a % b = 9;

(3)&=、|=、<<=、>>=、^=

a &= b; // a = a & b = 20
a |= b; // a = a | b = 31
a <<= b; // a = a << b = 62914560
a >>= b; // a = a >> b = 0
a ^= b; // a = a ^ b = 11

6、其他运算符

(1)sizeof(datatype) 用来返回数据类型所占字节(byte)的大小。

sizeof(int); // 4
sizeof(short); // 2
sizeof(byte); // 1

(2)typeof(class) 用来返回 class 的类型。

Type t = typeof(C1); // S01.C1 --> namespaceName.className

(3)& 返回变量的地址,&a.

(4)* 变量的指针,*a.

(5)条件判断 ? X : Y 条件表达式,如果条件判断为 true,输出X;为 false,输出 Y。

int c = 32 >= 12 ? 1 : 0;

(6)is 判断对象是否为某一类型。

(7)as 强制转换,即便转换失败,也不会抛出异常。

三、总结

今天的学习记录就到此结束了,其中有关数据类型转换的内容,准备下一篇文章再详细展开。

诸如变量的指针、变量的地址,目前因为还未涉及到这一部分内容,先暂且搁置,到后面如果有涉及到,再详细了解。


C#

0 人点赞