c语言中移位操作符的试验
2013-07-24 17:41
211 查看
c语言中有两个移位操作符——左移位“<<”和右移位">>".它们可以将一个值向左移和向右移。在左移位中,值最左边的被丢弃,而右边多出来的几个空位由0补齐。而右移在操作符同样,只是方向不同。一下例子以左移位操作符讲解。
猜想:
1若是移位数为负数怎么办,移还是不移?例如a>> -5,看下面代码实验
代码1:
运行效果:
它是移了多少位呢?可以算出得到为左移27位。这个值为什么是这样的?不是移26或者25位。int是整型,一般
大多是32位的,所以可以看出移位数为负数的话那么真实移位数是32+负数。可以编个代码试试对不对;
代码2:
[cpp] view
plaincopy
<span style="font-size:18px;">#include <stdio.h>
int main(int argc, char **argv)
{
int a=1;
printf("%d",a<<27);
return 0;
}
</span>
运行效果:
代码2中是将1移位27位则刚好和移位-5是相同结果。看官也可以试试别的数字和移位数
2若移位数本身大于操作数所占位数改如何?编个代码试试便知
[cpp] view
plaincopy
#include <stdio.h>
int main(int argc, char **argv)
{
int a=3;
printf("%d",a<<33);
return 0;
}</span>
运行效果:
上面代码所示将3左移位33位结果是6,为什么?以下结果为将代码改为a<<32,a<<34;
若是在改大些呢?以下为a<<64,a<<65,a<<66的结果
现在结果出来了,左移位的位数=a-32
由上面猜想可以得到移位的公式:实际移位数b=a-32*k;
右移也应该和左移一样。
注:以上试验基于gcc4.6.2 编译器所做。而实际移位数基于操作数的最大位数所得,故系统环境,编译器不同,实际移位数还是不同。所以基于移位操作符的程序移植难度较大
猜想:
1若是移位数为负数怎么办,移还是不移?例如a>> -5,看下面代码实验
代码1:
#include <stdio.h> int main(int argc, char **argv) { int a=3; printf("%d",a<<-5); return 0; }
运行效果:
它是移了多少位呢?可以算出得到为左移27位。这个值为什么是这样的?不是移26或者25位。int是整型,一般
大多是32位的,所以可以看出移位数为负数的话那么真实移位数是32+负数。可以编个代码试试对不对;
代码2:
[cpp] view
plaincopy
<span style="font-size:18px;">#include <stdio.h>
int main(int argc, char **argv)
{
int a=1;
printf("%d",a<<27);
return 0;
}
</span>
运行效果:
代码2中是将1移位27位则刚好和移位-5是相同结果。看官也可以试试别的数字和移位数
2若移位数本身大于操作数所占位数改如何?编个代码试试便知
[cpp] view
plaincopy
#include <stdio.h>
int main(int argc, char **argv)
{
int a=3;
printf("%d",a<<33);
return 0;
}</span>
运行效果:
上面代码所示将3左移位33位结果是6,为什么?以下结果为将代码改为a<<32,a<<34;
若是在改大些呢?以下为a<<64,a<<65,a<<66的结果
现在结果出来了,左移位的位数=a-32
由上面猜想可以得到移位的公式:实际移位数b=a-32*k;
右移也应该和左移一样。
注:以上试验基于gcc4.6.2 编译器所做。而实际移位数基于操作数的最大位数所得,故系统环境,编译器不同,实际移位数还是不同。所以基于移位操作符的程序移植难度较大
相关文章推荐
- 【C语言】统计一个数中1的个数(移位操作符)
- C语言编程开发中的移位操作符
- C语言移位操作符
- C语言的移位操作符
- C语言的移位操作符
- C语言的移位操作符
- c语言操作符---位操作符、移位操作符
- C语言中移位操作符那点事
- 在独立环境下做C语言和汇编语言的试验的一些感想
- C语言(四) 操作符和表达式(下)
- 一个按键检测与C语言的移位数为负的认识
- 给定一个二进制数,要求循环移位,在原二进制数中操作(C语言)
- C语言中,关于&,^,!布尔代数,移位操作的一些巧妙算法
- C语言操作符
- Java中的移位操作符
- C语言学习之操作符和表达式
- c语言操作符
- C语言循环移位-C语言范例宝典50
- C语言操作符总结
- C语言之操作符简介