C#程序设计经典300例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

实例013 按字节提取整型数值——按位运算符

【实例描述】

本实例主要介绍按位运算符和移位运算符的用法。实例从控制台输入一个十进制整数,然后将其转换成十六进制数并从控制台输出,接着提取该整数的每一字节所表示的十六进制数值,最后从控制台逐一输出。效果如图2-12和图2-13所示。

图2-12 按字节提取整型数值

图2-13 提取−1的每一字节

【实现过程】

(1)创建一个名为Logic的控制台应用程序。

(2)从控制台输入一个十进制整数,在main函数中添加代码如下:

    Console.WriteLine("请输入一个整数:");
    int Number = int.Parse(Console.ReadLine());         //从控制台输入一个十进制整数
    Console.WriteLine("{0}的十六进制形式为0x{1:X8}", Number, Number);

(3)按字节提取整数每一字节的值,代码如下:

    int NumberHex = Number & 0x000000FF;            //将数值与0xFF按位与运算
    Console.WriteLine("第1个字节为:0x{0:X2}", NumberHex); //十六进制输出第1字节
    NumberHex = Number >> 8 & 0x000000FF;           //将数值右移8位与0xFF按位与运算
    Console.WriteLine("第2个字节为:0x{0:X2}", NumberHex); //十六进制输出第2字节
    NumberHex = Number >> 16 & 0x000000FF;          //将数值右移16位与0xFF按位与运算
    Console.WriteLine("第3个字节为:0x{0:X2}", NumberHex); //十六进制输出第3字节
    NumberHex = Number >> 24 & 0x000000FF;          //将数值右移24位与0xFF按位与运算
    Console.WriteLine("第4个字节为:0x{0:X2}", NumberHex); //十六进制输出第4字节

【代码解析】

实例代码中首先从控制台输入一个十进制整数Number,然后将其按十六进制的形式输出,接着提取Number的4字节。实例代码中用到了按位与运算符“&”和右移位运算符“>>”。当一个整型数值与十六进制数0xFF进行按位与运算时,剩下的就是第一字节,其中0xFF表示的是十六进制数FF,“0x”是十六进制数的前缀。因为每字节有8个二进制位,提取第二字节时利用右移位运算符“>>”将Number右移8位,高位用0或1填充,低位自动丢失,此时第二字节移到了第一字节的位置,再将其与0xFF进制进行按位与运算,这样就提取了第二字节,同理,可提取第三和第四字节。

常用的按位运算符按位与运算符“&”、按位或运算符“|”和按位异或运算符“^”。

注意:这三个运算符对于整数类型来说,是按位运算符;对于布尔类型来说,就是逻辑运算符。

常用的移位运算符有左移位运算符“<<”和右移位运算符“>>”。

注意:当进行左移位时,高位自动丢失,低位用零填充;进行右移位时,低位自动丢失,正数高位用0填充,负数高位用1填充。