当移动一个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