C语言中,与2乘左移,与2除右移,这个是啥意思,求详细解释!!!
2个回答
展开全部
这句话的意思就是:
对一个数实施左移操作=对这个数×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.
对一个数实施左移操作=对这个数×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.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询