C#实践教程(第2版)
上QQ阅读APP看书,第一时间看更新

2.2 数据进制与格式

上一节对数据类型有了简单介绍,但数据类型的内容不止如此。本节将详细介绍常用数据类型的特点及用法。

2.2.1 十进制、二进制与十六进制

十进制是人们生活中常用并习惯使用的数据。十进制数据以10为基数,由从0到9这10个数字构成,满十进一。

1. 常见的数据进制

计算机中的数据只有两位,即0和1,是二进制数据。二进制数据由0和1这两个数字构成,十进制中的数字3被转化成二进制表示为11,满二进一。因此,十进制中的4等同于二进制中的100。

同样道理,十六进制由十六个数字构成,满十六进一。由于数字只有0到9这10个,不足以表示十六进制所需的十六个,因此需要使用大写字母A到F来表示。

表示十六进制的数字为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。十六进制中的F相当于十进制中的15;十六进制10相当于十进制数字16。

对于十进制数据,从低位到高位分别表示个、十、百、千等,依次表示为100、101、102、103;对于二进制数据,从低位到高位依次为20、21、22、23和24等;十六进制数据从低位到高位依次为160、161、162、163等。

因此,对于二进制数据11001来说,转换为十进制数据为:1×1+0×2+0×4+1×8+1×16=25。十六进制数据AAA转化为十进制为:10×1+10×16+10×256=2730。

由十进制转化为二进制或十六进制的方法较为复杂,具体方法如下。

2. 十进制整数转换为二进制整数

采用“除2取余,逆序排列”法。用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

如对十进制126进行转化,首先使用126/2=63,余0;接下来使用63/2=31,余1;31/2=15,余1;15/2=7,余1;7/2=3,余1;3/2=1,余1;1/2=0,余1。则结果为1111110,即将所有余数反过来排列,即可得到结果。

3. 十进制整数转换为十六进制整数

采用“除16取余,逆序排列”法。与十进制转化为二进制的方法相同,只是将除数换成了16。

如对十进制126进行转化,首先使用126/16=7,余14;7/16=0,余7。14需要使用字母E表示,126转化为十六进制为7E。

2.2.2 字符串类型格式化

字符串类型的输出,除了可以使用转义字符来规范格式以外,还可以根据指定格式进行输出。字符串格式的规范性可使用格式标识符、使用Console.WriteLine()方法、使用string.Format()方法和使用“@”符号等。

1. 使用Console.WriteLine()方法及格式标识符

为了规范输出数据,Console.WriteLine()方法可直接对字符串的格式进行规范,其中一种规范格式如下所示:

Console.WriteLine(“{0} {1}”,参数1,参数2…)

上述代码中,{0}代表第一个参数,{1}代表第二个参数。Console.WriteLine()方法可包含多个参数,使用大括号和数字来表示。其内部数字从0开始,相同的编号只能代表相同的参数。如输出字符串“我的小妹名叫秋秋,今年7岁”,将“秋秋”和“7岁”作为参数,可使用如下语句:

Console.WriteLine("我的小妹名叫{0},今年{1}","秋秋","7岁");

在C#中提供了格式标识符号,用来规范字符串的输出格式。常见的格式标识符号如表2-4所示。

表2-4 格式标识符号及其含义

如分别使用逗号分隔符号和精度格式,输出同一个数据56789,使用语句如下所示:

Console.WriteLine("{0:N1}", 56789);
Console.WriteLine("{0:N2}", 56789);
Console.WriteLine("{0:N3}", 56789);
Console.WriteLine("{0:F1}", 56789);
Console.WriteLine("{0:F2}", 56789);

运行上述语句,其效果如图2-2所示。若Console.WriteLine()方法中有两个参数,都需要双精度表示,则可以使用“Console.WriteLine("{0:F2}{1:F2}", 56789,1234);”语句。

在C#中,有Console.Write()方法,其用法与Console.WriteLine()方法只有一点不同:Console.WriteLine()方法在输出的同时,在输出内容的末尾添加换行符,而Console.Write()方法只输出指定的内容,不对文字进行换行。

如图2-2中的输出,使用Console.Write()方法来替换Console.WriteLine()方法,结果如图2-3所示。

图2-2 字符串格式标识的使用

图2-3 Console.Write()方法显示效果

2. string.Format()方法

在C#中,有不需要输出而只指定字符串格式的方法:string.Format()方法。该方法根据指定的格式,返回一个格式字符串,其格式的使用与Console.WriteLine()方法一样。如同样是“我的小妹名叫秋秋,今年7岁”字样,使用string.Format()方法语句如下:

string.Format ("我的小妹名叫{0},今年{1}","秋秋","7岁");

输出该字符串,语句如下:

Console.WriteLine(string.Format ("我的小妹名叫{0},今年{1}","秋秋","7岁"));

该语句与下述语句的输出结果一样。

Console.WriteLine("我的小妹名叫{0},今年{1}","秋秋","7岁");

3. @的使用

在C#中,一些特殊符号被赋予了特殊的用法,但字符串中的特殊符号并不希望被用作特殊的用法,而是希望被作为普通字符输出,此时可以使用“@”符号,将字符串原样输出。

如“\n”可以作为换行符,在字符串中间分隔字符串,分别使用不含@的输出和含有@的输出,查看运行效果,使用代码如下所示:

Console.WriteLine("我的小妹名叫秋秋,\n今年7岁");
Console.WriteLine(@"我的小妹名叫秋秋,\n今年7岁");

运行上述代码,其结果如图2-4所示。第一句代码没有使用@符号,语句中的转义字符\n被作为换行符使用;而第二句,在字符串的前面使用@符号,@后的字符串被原样输出,如图2-4所示。

图2-4 字符串的原样输出