C#基础知识(1)

C#基础知识

一、常用单位转换

每一个二进制位称为一个比特位bit

8bit => 1byte

1024byte => 1KB

1024KB => 1MB

1024MB => 1GB

1024GB => 1TB

1024TB =>1PB

1024PB =>1EB

二、负数表示

通常把一个二进制的最左边一位叫做最高位,如果需要表示负数则最高位是符号位,不表示一个数值大小,只表示数值正负性。0为正,1为负。为了计算负数引入了原反码补码的概念。

原码

原码:直接由其他进制计算过来的得到的结果

反码

反码:符号位不变,其他位按位取反

补码

补码=反码+1

1.以上的规则只针对负数,正数的原码反码补码都一样。

2.所有的数据在计算机中存储与运算都是以补码的形式进行的。

3.如果计算的结果有溢出的情况,则溢出位全部舍去。

4.由负数的补码求原码:对计算出的数值再求一次补码。

!!!取值范围

无符号的八位二进制数的表示范围:[0~255]

有符号的八位二进制数的表示范围:[-128~127]

即:[2^(位数-1) ~ 2^(位数-1)-1]

0111 1111 ——> 127

1111 1111 ——> -1

1111 1110 ——> -2

1000 0001 ——> -127

1000 0000 ——> -0(-128)

0000 0000 ——> +0

因为有两个二进制数都表示0 因此规定:1000 0000 ——> -128

三、c#数据类型

1.基本数据类型

a、整型

默认值:0

  1. 有符号整型(八位二进制中第一位表示正负其余七位表示数值)
    字节型 ——> sbyte ——> 1byte ——> [-128~127]
    短整型 ——> short ——> 2byte ——> [2^(位数-1) ~ 2^(位数-1)-1]
    整型 ——> int ——> 4byte ——> [2^(位数-1) ~ 2^(位数-1)-1]
    长整型 ——> long ——> 8byte ——> [2^(位数-1) ~ 2^(位数-1)-1]
  2. 无符号整型(八位二进制中各位数只表示数值不表示正负)
    字节型 ——> byte ——> 1byte ——> [0~255]
    短整型 ——> ushort ——> 2byte ——> [0~2^(位数-1)]
    整型 ——> uint ——> 4byte ——> [0~2^(位数-1)]
    长整型 ——> ulong ——> 8byte ——> [0~2^(位数-1)]

b、浮点型

默认值:0.0(与整型的区别在于加了小数点)

在计算机中用科学计数法存储。eg:12.3 X 10 ^ 5 == 12.3e5 (e表示X10^)

  1. 单精度 ——> float ——>4byte ——> 3.14f(float需要在数字后面加f或者F)
  2. 双精度 ——> double ——>8byte ——> 3.14d(double需要在数字后面加d或者D,也可以不加)
  3. 高精度 ——> decimal ——>16byte ——> 3.14m(decimal需要在数字后面加m或者M)

c、布尔型

默认值:false

布尔型 ——> bool ——> 1byte ——> [true,false]

d、字符型

默认值:用’\u0’或是’\u000’来表示(一般来说表示的意义是一个空格,然而不同的终端显示的以不同,也有可能是一个口)

结果应该为一个空格(’\0’),但有时结果会为a,这是因为控制台字体的影响

有可能在某种字体中显示’\0’时候就是a那种样子,那么就可以解释的通了

字符型 ——> char ——> 2byte

1、任何的字符在计算机底层存储中都是采用一个数字来存储的

2、一个字符到底要用什么样的数字来存储,由字符集(如Ascll码、Unicode码等)来决定。

3、一个字符和一个整型的数据是相通的,是可以相互转换的。

​ 字符 ——> 整型:c + 1

​ 整型 ——> 字符:(char)(c + 1)

​ eg:

//占用字符长度为1的符号,单引号赋值,只能赋值一个字符,并且不能为空。
char c = 'a';
Console.WriteLine(c);//结果为:a
Console.WriteLine(c+1);//结果为:98
char d= '张';
Console.WriteLine(d);//结果为:张
Console.WriteLine((char)(d+ 1));//结果为:弡(jue)
//自动类型转换
int a = 'a';
//强制类型转换
char a = (char)97;

2.引用数据类型

引用数据类型的默认值为NULL。(表示空 表示没有值,连地址都没有)

利用堆栈解释引用类型:

int[] array = {1, 2, 3, 4, 5 }; 等价于 int[] array = new int[5]{1, 2, 3, 4, 5 };

1、除了结构体外,其他的new都是在堆中开辟空间的

2、数组在堆中的第一个元素的地址是随机的,但是之后的元素地址都是连续的

数组array中有五个元素,在堆上开辟了5个连续的4字节空间(如下图),每个空间都有相对应的地址(int数据类型,一个数据占四字节,因此开辟4字节空间)。

堆栈应用数据类型
其中0x1234是数组的首元素地址,当Main方法执行时被压入栈中,Main方法中声明了Array数组。此时打印数组Console.WruteLine(array)发现,打印出来的结果并不是元素,而是System.Int32[]。原因是c#语言中不显示地址,而原本应该显示的是地址才对,所以结果变成了数组元素的数据类型。

因此我们可以知道在Array数组中存储的不是元素而是数组中首元素在堆上的地址,所以在Main方法中Array称作是堆上数组的引用。因此是引用数据类型。

static void main(String[] args){
   
    int[] Array = {
    1, 2 , 3, 4, 5 };
	Console.WriteLine(Array);//结果为Syetem.Int32[]
}
2.1 字符串

字符串:一个系列字符组成的一个有序序列,是一个引用数据类型,关键字String,一个字符串需要用双引号引起来。

//字符串可以长度为0
string name = "qwere";
Console.WriteLine(name);//结果为:qwere

字符串拼接

​ 字符串连接运算符“+” :当“+”前后有任意一个是字符串时,此时“+”被当做是连接运算符

//字符串拼接
String a = "hello";
String b = "world";
String c = a + b;
Console.WriteLine(c);//结果为:helloworld
//字符串连接运算符+ :当+前后有任意一个是字符串时,此时+被当做是连接运算符
Console.WriteLine("hello"+1);//结果为hello1
Console.WriteLine(1+"hello");//结果为:1hello
Console.WriteLine(1+2+3+"hello");//结果为6hello
Console.WriteLine(1+2+3+"hello"+3+2+1);//结果为:6hello321,原因如下:
/*
 * 1、符号都为+时算同级运算,因此从前往后1+2+3被当做算术运算符执行得到6;
 * 2、第三个+后面是字符串所以被当做字符串连接符执行,得到6hello;
 * 3、后面的3+2+1在执行时,因为前面已经是字符串了,所以此时也由整型转换成了字符串,因此得到6hello321
 */

解析字符串变量

​ 符号 $ :在字符串前方加一个$,表示解析字符串中的变量,字符串中的变量用{}括起来即可。

//符号$:在字符串前方加一个$,表示解析字符串中的变量,字符串中的变量用{}括起来即可。
int meter = 1;
String str = $"小明跑了{meter}米";
Console.WriteLine(str);//结果为:小明跑了1米

字符串原意输出

​ 符号@:原意输出,不需要进行转义即不加转义字符“\”(弊端:@“”中不能再出现双引号了)

//C:\"Program Files(x86)"\
//通常的转义字符\:在C:\"Program Files(x86)"\字符串中第一个需要转义的从左到右分别是 :\ " " \ 这5个符号。
String path = "C:\\\"Program Files(x86)\"\\";
Console.WriteLine(path);
//符号@
String Path = @"C:\Program Files(x86)\";
Console.WriteLine(Path);

输出字符串语句

//输出语句用法
//Console.WriteLine();将括号中的内容输出到控制台,并且换行
//Console.Write();将括号中的内容输出到控制台,并且不换行

//输出语句小明跑了1米;三种写法:
float time = 2;
//第一种
Console.WriteLine("小明跑了"+meter+&
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值