关于C语言移位的问题

Python026

关于C语言移位的问题,第1张

只考虑位移量的log2w的意思是,如果把位移量k换算成二进制的话,比如说,w为32,log2w就是5,k为32,换算成二进制就是100000,也就是只考虑后5位,这不就相当于k对m取余么,所以下面一句也就可以理解了。。我以为举个例子会比较好理解的。。下面还是附上我整个的思考逻辑吧。。

当移动一个w位的值时,移位指令只考虑位移量的低log 2 w位

c语言中规定的w位数一般为8、16、32、64。

假设k的低log 2 w位的值为u

那么高于log 2 w位的值显然都是w的倍数

k=n*w+u

其中n>=0,当n=0的时候,k<w,n>=1的时候,k>=m

所以k mod w = (n*w+u) mod w = u

putchar(value&displayMask ? '1':'0')

这里只有1个&表示按位进行与运算,比如value=10110 displaymask=10000

value&displayMask=10000 为真输出字符"1"然后左移1位value=01101 value&displayMask=00000 为假输出字符"0"继续这么下去,输出的就是10110 你可以自己试下去,这个是一种算法.因为displaymask的数值是第一位为1其他为0,所以每次进行&操作时只有value的最高位才能"与"出0或1,后面的肯定是0一旦value的最高位是1结果就是10000为真,输出1若是value的最高位0,value&displayMask的结果肯定是00000,非真,输出0,通过将value依次左移1位,它的各位数值就复现出来了...你要理解 ?A:B 的意思是"?"前面结果为真就进行A操作,否则进行B操作,value&displayMask这个的意思是按位与.

就是把一个数转化成二进制再直接对他进行操作

例如:

45>>2 //45右移两位

45的二进制为:101101

右移两位就为: 001011

001011再转化为十进制为:11

所以45>>2= 11

左移运算符

45<<2

45的二进制为:101101

左移两位就为:10110100

10110100再转化为十进制为:180

所以45<<2=180