① c语言 位移操作问题
移位 -- 不是“位移”操作
n<<3,2进制,左移3位,就是 n=n*2*2*2, 就是n*8
0,1,2,3 -- 变 0,8,16,24
x >> 24 最高字节 移到最左, & 0xff 取出来。
x >> 16 第二 高字节 移到最左, & 0xff 取出来。
x >> 8 第3 高字节 移到最左, & 0xff 取出来。
x >> 0 不移动,& 0xff 取出来。
例如:
00111111 01010101 11111111 00000001
x >> 24 得 00000000 00000000 00000000 00111111
x >> 16 得 00000000 00000000 00111111 01010101
x >> 8 得 00000000 00111111 01010101 11111111
② 关于C语言位移的一个问题
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这个的意思是按位与.
③ c语言中的位移运算是怎样执行的啊,最好有例子......
左移就是把二进制表示,向左面移动,右边补零,超过部分会丢弃
比如char x = 126, 是8位的,11111110 左移2位,补2个零,11 1111 1000,本来8位,会丢弃超出的2位
得到 11111000
右移,是右面部分丢弃一些位,左面补零
比如char x = 126, 是8位的,11111110 右移2位,丢弃2位, 111111,本来8位,少2位,补零得到 00111111
④ 关于c语言的位移问题
答:
1.unsigned char的数据左移八位,那么低八位会变成0
2.c=(a<<8)+b;因为左边c是unsigned int类型,c语言会进行强制类型转换,把(a<<8)和b当作unsigned int数据类型,这样,如果a=1,那么c将等于c=(1<<8)+b=256+b
这个问题的关键点在于C语言在计算的时候会进行强制类型转换,=右边的数据类型都会被强制转换成=左边的数据类型。换个问题,如果是b=(a<<8),那么无论我们将会得的b=0
希望回答能对于你学习c语言有帮助。
⑤ 关于C语言移位的问题
只考虑位移量的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
⑥ C语言中位移位运算符
c语言位运算符包括 位逻辑运算符 和 移位运算符。
位逻辑运算符:&按位与,|按位或,^按位异或,~取反
移位运算符:<<左移,>>右移
-----------------------------------------------------------------------
&按位与运算符:二进制中运算,0&0=0,0&1=0,1&0=0,1&1=1,相当于布尔型的与运算
|按位或运算符:二进制中运算,0|0=0,0|1=1,1|0=1,1|1=1,相当于布尔型的或运算
^按位异或运算符:二进制中运算,0^0=0,0^1=1,1^0=1,1^1=0,0与0位异或等于0,1与1位异或等于0,1和0异或等于1
~取反运算符,二进制中运算:~1=0,~0=1,非1等于0(非真得假)非0等于1(非假得真)。
<<左移运算符:运算规则:把"<<"左边的运算数的各二进制位全部左移若干位,移动的位数由"<<"右边的数指定,高位丢弃,地位补0。可以实现乘法运算,二进制0000011<<2得二进制00001100.
>>右移运算符:运算规则:把">>"左边的运算数的各二进制位全部右移若干位,移动的位数由">>"右边的数指定。有符号的数右移时符号也随着右移;是正数的话在最高位补0,是负数的话,符号位为1,最高位补0还是补1决取于计算机系统的规定。移入0的称为"逻辑右移",移入1的称为“算术左移”。很多系统规定为补1,即“算术右移”。右移运算可以实现除法的功能,右移1位相当于该数除以2,右移n位相当于该数除以2的n次方。
-------------------------------------------------------------------------
运算符 优先级 运算符类型
& 8 双目
| 10 双目
^ 9 双目
~ 2 单目
<< 5 双目
>> 5 双目
---------------------------------------------------------------------------
⑦ C语言位移使用求解
那要看你是怎么为temp声明的类型——如果是char型,则是11111111;如果是unsigned char型,则是00001111;如果是int型,当然也是00001111——一句话,若temp是正数则是00001111,若是负数,则是11111111。
⑧ c语言中位运算的左位移右位移都是什么意思
假设0010
左移就是把二进制数向左移动,右边补0,0的二进制全是0,左移之后右边再补0。
0010<<2 就是1000 实际是做的*4。
1000>>2 计算 0010 实际做的是/4。