请让我知道怎么做<<和>>运营商在C?

时间:2011-04-21 04:49:08

标签: c

void main()
{
    int x=5;
    printf("%d%d%d \n",x,x<<2,x>>2);
}

6 个答案:

答案 0 :(得分:5)

<<>>分别是左右移位运算符。

这些运算符对左操作数应用按位移位;要转移的位置数由右操作数确定。

在此示例中,我们有三个表达式:x(x << 2)(x >> 2)

对于x = 5,这些表达式的值为:

Expr.     Dec. Value  Binary Value (Top 24 bits (all zero) ommitted)
x         5           00000101
x << 2    20          00010100
x >> 2    1           00000001

请注意,一个位置的左移有效地将unsigned int乘以2;类似地,右移将无符号整数除以2.此外,移位是算术还是逻辑(即符号敏感)取决于实现。

答案 1 :(得分:4)

他们是左移和右移操作员。 Bitwise operations

答案 2 :(得分:0)

<<向左移动,>>向右移动。所以在你的例子中,x>>2抛弃了5的最后两位(二进制101)。那将是1。

5<<2为20(二进制为10100)。

答案 3 :(得分:0)

这些是逻辑移位运算符,<<X表示左移x次,>>X表示右移x次。

如果您有一个像14这样的数字,它将被存储为一系列位“00001110”。当您离开此数字1次时,存储的位序列变为“00011100”,并且您得到数字28.向左移动数字与将其相乘2相同,而向右移动则与除以2相同在这个例子中,由于只有8位可用,左侧任何被推入“第9”点的数字都会消失。同样的规则适用于正确的转变。

答案 4 :(得分:0)

x<<y表示x * 2 ^ y(^表示“以”为幂“),x>>y表示x / 2 ^ y。它们仅针对正x进行了明确定义,仅适用于y小于x类型宽度的位数,如果x已签名,则仅适用于{{1}}结果不会溢出。

答案 5 :(得分:0)

这些基本上是按位移位运算符。

左移位运算符使第一个操作数中的位模式向左移位第二个操作数指定的位数。 左移表达式(x <&lt; y)的值是x *(2 ^ y)

00010111 LEFT-SHIFT by 1 = 00101110

右移也做同样的事情,但将位模式向右移动。 右移表达式的值x>&gt; y是x /(2 ^ y)

00010111右移1 = 00001011