C语言中,与2乘左移,与2除右移,这个是啥意思,求详细解释!!!

2024-11-29 07:52:09
推荐回答(2个)
回答1:

对一个数实施左移操作=对这个数×2;对一个数实施右移操作=对这个数÷2。

a=ox32(16进制)00110010

b=a<<2

这个时候b=11001000对

那么此时a=00110010

继续

c=a<<2

请问c是在原来a的初值(ox32)上移动

这个时候c=11001000

一个十进制的数,在电脑中都可以按二进制表示。例如:数字8,二进制就是1000.左移一位,1000<<1=00010000=16,因此就是=8×2;同理右移一位,1000>>1=0100=4,就是8÷2。

扩展资料

C语言中移位代替乘除

unsignedinthash(charconst*s)

{

unsignedh=0;

while(*s!='\0'){

h=127*h+(unsignedchar)*s;

++s;

}

returnh;

}

回答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.