我需要对以下语句进行一些解释,它在做什么?:
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? */
我需要对以下语句进行一些解释,它在做什么?:
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? */
(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
正数和负数设计结果..
答案是 1075419546。左移运算符基本上是在十进制数的二进制表示中添加 0,所以这只是为了
154 + 153 * 2^8 + 25 * 2^16 + 64*2^24
因此,您可以将 153 转换为其二进制表示,然后添加 8 个零并转换回十进制等。
实际上,如果您在数学表达式上使用给定的运算符,它的含义与以下内容相同:
123 << n 与 123 * 2 ^ n 完全相同
例如,2 << 2 是 2 * 2 ^ 2,即 8 或等于 1000
否则,您只是向左移动位:
3 = 11 然后 3 << 2 = 1100。
希望它说清楚。