首页 > 编程笔记 > C语言笔记 阅读:75

C语言左移和右移怎么算(图文并茂,附带实例)

为了更好地理解左移和右移运算符的特性,我们选取两个整数 170 和 102,并使用自定义的 printBinary() 函数输出它们的二进制表示形式:
void printBinary(unsigned char dec)
{
    // 数组初始化为 0
    char bits[8] = {0};
    int count = 0;
    int quotient;
    int remainder;
    while(dec > 0)
    {
        remainder = dec % 2;
        quotient = dec / 2;
        dec = quotient;
        bits[count] = remainder;
        count++;
    }
    // 逆序输出所有二进制位
    for (int i = 8 - 1; i >= 0; i--)
        printf("%d", bits[i]);
    putchar('\n');
}
printBinary(170);
printBinary(102);
将十进制数 170 作为 printBinary() 函数的参数,它将输出 170 对应的二进制数 10101010。将十进制数 102 作为 printBinary() 函数的参数,它将输出 102 对应的二进制数 01100110。

C语言左移运算符<<

C语言中的左移(<<)是将一个整数的二进制位向左移动指定的位数,右侧用 0 填充。例如:
printBinary(231);
printBinary(231 << 1);
printBinary(231 << 2);
printBinary(231 << 3);
运行结果为:

11100111
11001110
10011100
00111000

下图展示了左移的步骤:


图 1 左移

C语言右移运算符>>

右移(>>)是将一个整数的二进制位向右移动指定的位数。对于无符号类型,空出来的位置用 0 填充;对于有符号类型,空出来的位置用 0 或 1 填充。这取决于编译器。

例如:
printBinary(231);
printBinary(231 >> 1);
printBinary(231 >> 2);
printBinary(231 >> 3);
运行结果为:

11100111
01110011
00111001
00011100

下展示了右移的步骤:


图 2 右移

相关文章