发布网友 发布时间:2022-04-24 02:41
共2个回答
热心网友 时间:2023-07-29 00:38
这句话的意思就是:
对一个数实施左移操作=对这个数×2;
对一个数实施右移操作=对这个数÷2。
这个是计算机基本的二进制操作,因此不仅仅局限于C语言,
事实上绝大多数计算机编程语言都支持这个操作。
理解很容易:
一个(十进制的)数,在电脑里面都可以按二进制表示。
比如数字8,
二进制就是1000.
左移一位,1000
<<
1
=
0001
0000
=
16,
因此就是=8×2;同理右移一位,
1000
>>
1
=
0100
=
4,
就是8÷2.
一个十进制a(这里先以正整数为例说明),
总可以表示成:
a
=
a[n-1]*2^(n-1)+a[n-2]*2(n-2)
+
....
a[1]*2^1
+
a[0]+2^0;
这里a[n-1]....a[0]的取值范围就是0或1,就是一个二进制数各个位上权系数。
假设a[i]
<<
k;
a[i]
->
a[i+k];
它对整个数的贡献值,从2^i
->
2^(i+k)
=
2^i
×
2^k,
二进制的每一位都这样操作,因此这个数就被放大了2^k倍。当k=1的时候,就是×2;同理右移就是÷2^k.
热心网友 时间:2023-07-29 00:39
c语言中
<<
是逻辑移位,不是循环移位。
1
左移
32
位后为
0,左移
-1
位实际是左移
255
位(互补),当然也是0。
这种问题可以写一段小程序,单步执行,看一下每一步的结果。