1

我需要对以下语句进行一些解释,它在做什么?:

int result = 154 + (153 << 8) + (25 << 16) + (64 << 24);
/* what would be the value of result after this line and how it is calculated
Why we need this? */
4

3 回答 3

4

(153 << 8)相当于153 * pow(2, 8)

你实际上是在向左移动你的位..

还: -

(153 >> 8)相当于153 / pow(2, 8)

你可以猜到为什么..这实际上是向右移动位..

例如:-

3 => 0011

3 << 2 is equal to 1100 -> (Which is code for 12)

3 >> 2 is equal to 0000 -> (Which is code for 0) -> you can see - **(3 / 4 = 0)**

注意:- 请注意,right shifting rounds off towards negative infinity..

对于 EG:-

-3 >> 1 --> -2 (-1.5 is rounded to -2)

让我们看看它是如何发生的:-

在二进制字符串表示中: -

-3 ==> 11111111111111111111111111111101

-3 >> 1 ==> 11111111111111111111111111111110 (-3 / 2 = -1.5 -> rounded to -2)

(请注意,最左边的位由移位前最左端的位填充(在本例中为 1))

因此,该值变为-2(对于 -3>>1,大于-3)这发生在负数..Right shifting a negative number gives a number greater than the original number..

这与最左边的位将被填充的正数相反0......因此value obtained will be less than the original..

3 ==>  00000000000000000000000000000011

3 >> 1 ==> 00000000000000000000000000000001 (3 / 2 = 1.5 -> rounded to 1)

(所以最左边的位保持为 0。因此,值为 1(小于 3),即,值向负无穷大四舍五入,从 1.5 变为 1)

同样,您可以为left-shifting正数和负数设计结果..

于 2012-10-04T12:47:02.750 回答
2

答案是 1075419546。左移运算符基本上是在十进制数的二进制表示中添加 0,所以这只是为了

154 + 153 * 2^8 + 25 * 2^16 + 64*2^24

因此,您可以将 153 转换为其二进制表示,然后添加 8 个零并转换回十进制等。

于 2012-10-04T12:52:26.843 回答
0

实际上,如果您在数学表达式上使用给定的运算符,它的含义与以下内容相同:

123 << n 与 123 * 2 ^ n 完全相同

例如,2 << 2 是 2 * 2 ^ 2,即 8 或等于 1000

否则,您只是向左移动位:

3 = 11 然后 3 << 2 = 1100。

希望它说清楚。

于 2012-10-04T12:45:48.483 回答