整数

整数类型用于处理没有小数部分的数据,其中,有符号整数用于处理0、正整数和负整数,无符号用于处理0和正整数。

C#基本数据类型中的整数类型有byte、sbyte、short、ushort、int、uint、long、ulong。

算术运算

代码中,算术运算包括:

  • 加法运算,使用+运算符,如10+3得13。
  • 减法运算,使用-运算符,如10-3得7。
  • 乘法运算,使用*运算符,如10*3得30。
  • 除法运算,使用/运算符,如10/3得3。整数除以整数会得到整数结果,如果需要得到浮点数结果,应确保被除数和除数中有一个为浮点数。
  • 求余数运算,也称为模(mod)运算,使用%运算符。如10%3得1。

下面的代码演示了整数的五种算术运算。

C#
using System;
namespace HelloProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            int y = 3;
            Console.WriteLine("x + y = {0}" , x + y);
            Console.WriteLine("x - y = {0}" , x - y);
            Console.WriteLine("x * y = {0}" , x * y);
            Console.WriteLine("x / y = {0}" , x / y);
            Console.WriteLine("x % y = {0}" , x % y);
        }
    }
}

代码输出结果如下图。

类型转换

C#中有多种整数类型,分别处理有符号整数、无符号整数,并且,它们处理的数据范围也有所不同;代码中,运算数据可能会来自不同的途径,它们的类型也可能不同。

不同类型的数据进行计算时,如果有可能,会自动进行类型转换;这里应注意类型转换的一些基本原则:首先会将取值范围小的数据转换为取值范围大的类型,然后进行计算,计算结果的类型是取值范围大的类型。

下面的代码演示了int和long类型数据进行运算的结果。

C#
using System;
namespace HelloProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            long y = 99;
            Console.WriteLine("x + y = {0}", x + y);
            Console.WriteLine((x + y).GetType().ToString());
        }
    }
}

代码执行结果如下图。

代码中有两个输出结果,第一个显示了计算结果。第二个首先使用GetType()方法获取了数据的类型(Type类);然后,使用ToString()返回数据的原始类型,最终显示x+y的结果的数据类型为System.Int64,也就是long的实际类型。

前例中的x和y的求和运算过程中,使用了隐式的类型转换,代码中,如果需要明确转换的目标类型,可以使用强制转换,如(int)(x+y)就是将x+y的结果强制转换为int类型。

强制类型转换时,在需要转换类型数据的前面使用一对圆括号定义目标类型;如下面的代码,会将y转换为int类型后进行计算。

C#
using System;
namespace HelloProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            long y = 99;
            Console.WriteLine("x + y = {0}", x + y);
            Console.WriteLine((x + (int)y).GetType().ToString());
        }
    }
}

代码执行结果如下图,我们可以看到,最终计算结果的类型是System.Int32,也就是int的原始类型,用于处理32位有符号整数。

增量运算与减量运算

增量运算包括前增量运算和后增量运算,都使用++运算符,执行的也都是加1操作。首先来看前增量运算,如下面的代码。

C#
using System;
namespace HelloProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            Console.WriteLine(++x);
            Console.WriteLine(x);
        }
    }
}

代码执行结果如下图。

我们可以看到,“++x”表达式的值是x加1后的数据,也就是说,前增量运算时,会先进行加1操作,表达式和变量的结果都是加1后的数据。

后增量的不同点在于,“x++”表达式会先返回x的原始数据,然后进行x加1的操作,如下面的代码。

C#
using System;
namespace HelloProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            Console.WriteLine(x++);
            Console.WriteLine(x);
        }
    }
}

代码执行结果如下图。

实际应用中,如果不需要使用增量表达式的值,只使用运算后的变量数据,则前增量和后增量的效果是一样的;但如果需要使用增量表达式的值,则需要很小心的区分前增量和后增量的区别。

减量运算执行减1操作,使用--运算符,同样分为前减量与后减量运算。其执行逻辑与增量运算相似,如下面的代码。

C#
using System;
namespace HelloProject
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = 10;
            Console.WriteLine(--x);
            Console.WriteLine(x);
            int y = 10;
            Console.WriteLine(y--);
            Console.WriteLine(y);
        }
    }
}

代码执行结果如下图。

位逻辑运算

整数与二进制的基本概念,请参考文章整数与二进制

C#中的位运算包括:

  • 位与运算,使用&运算符。两个数位都为1时结果为1,有一个数位为0时结果为0。
  • 位或运算,使用|运算符。两个数位有一个为1时结果为1,两个数据位都是0是结果为0。
  • 位取反运算,使用~运算符。二进制数位中1变0,0变1。
  • 位异或运算,使用^运算符。两个数位值不同时结果为1,相同时结果为0。

位移运算

C#中的位移运算包括:

  • 位左移,使用<<运算符,二进制位向左(高位)移动;无符号整数时,数位整体左移,数据的低位补0;有符号整数时,符号位不变,数据位左移,低位补0。如x<<3其实际执行的就是x*23的运算,即2<<3的结果为16。。
  • 位右移,使用>>运算符,二进制位向右(低位)移动;无符号整数右移运算时,数位整体右移,高位补0;有符号整数右移运算时,符号位不变,移动的数位用符号位数据填充。如x>>3执行的就是x÷23的运算,即64>>3结果为8。
本站内容均为原创作品,转载请注明出处,本页面网址为:http://caohuayu.com/chy/article/Article.aspx?code=cc002005