C语言左移和右移怎么算(图文并茂,附带实例)
为了更好地理解左移和右移运算符的特性,我们选取两个整数 170 和 102,并使用自定义的 printBinary() 函数输出它们的二进制表示形式:

图 1 左移
例如:

图 2 右移
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 右移