请告诉我<>运算符在C中是如何工作的?
void main() { int x=5; printf("%d%d%d \n",x,x<>2); }
他们是左移和右移操作员。 按位运算
<<
和>>
分别是左移和右移运算符。
这些运算符对左操作数应用按位移位; 要转移的位置数由右操作数确定。
在这个例子中,我们有三个表达式: 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.此外,移位是算术还是逻辑(即符号敏感)是依赖于实现的。
<<
向左移动,向右移动>>
。 所以在你的例子中, x>>2
抛弃了5的最后两位(二进制101)。 那将是1。
5<<2
是20(二进制10100)。
那些是逻辑移位运算符, <
>>X
表示右移x次。
如果您有一个像14这样的数字,它将被存储为一系列位“00001110”。 当您离开此数字1次时,存储的位序列变为“00011100”,并且您得到数字28.向左移动数字与将其乘以2相同,而向右移动则与除以2相同在这个例子中,左侧任何被推入“第9”点的数字都会消失,因为只有8位可用。 同样的规则适用于正确的转变。
x<
x>>y
表示x / 2 ^ y。 它们仅针对正x
定义良好,仅针对小于x
类型的宽度的y
位,并且如果x
是有符号的,则仅在结果不溢出时才定义。
这些基本上是按位移位运算符。
左移位运算符使第一个操作数中的位模式向左移动第二个操作数指定的位数。 左移表达式(x << y)的值是x *(2 ^ y)
00010111 LEFT-SHIFT由1 = 00101110
右移也做同样的事情,但将位模式向右移动。 右移表达式x >> y的值是x /(2 ^ y)
00010111右移1 = 00001011