———–Java培训、Android培训、IOS培训、.Net培训、期待与您交流!————
自己敲得一些代码,来更好地了解左移右移运算,并且将10进制整数转换为2进制输入。代码如下,关于里面的变化,相信小伙伴们能够从注释里面看到。
#include <stdio.h>
int main()
{
void IntToBinary();
void IntToBinary2();
int inputNumber = 0;
do
{
printf("请您输入需要转换为二进制的数,退出请输入0:\n");
scanf("%d",&inputNumber);
if(inputNumber==0){break;}
IntToBinary(inputNumber);
IntToBinary2(inputNumber);
printf("\n");
}while (inputNumber!=0);
return 0;
}
void IntToBinary(int num)
{
int intLength = sizeof(int);
printf("你输入的十进制数字%d转换为二进制如下:\n",num);
for(int i = (intLength<<3)-1;i >= 0;i--)
{
printf("%d",(num>>i)&1);
if(i%4==0)
{
printf(" ");
}
}
printf("\n");
}
void IntToBinary2(int num)
{
int intLength = sizeof(int);
printf("你输入的十进制数字%d转换为二进制第二种方法如下:\n",num);
printf("%d",(num>0?0:1));
for(int i = (intLength<<3)-2;i >= 0;i--)
{
printf("%d",(num&(1<<i))>0?1:0);
if(i%4==0)
{
printf(" ");
};
};
printf("\n1<<30=%d",1<<30);
printf("\n1<<31=%d",1<<31);
printf("\n1>>1=%d",1>>1);
printf("\n1>>2=%d",1>>2);
printf("\n");
}
程序运行结果如下:
综合以上代码和注释可以看出,左移右移运算是有边界的,一旦逾越可能会得到未知的结果,所以sizeof是很有必要使用来动态获取当前环境变量所占字符数,然后,右移操作注意移到最后一位,左移还得多考虑一个符号位的问题,建议测试的时候使用负数测试一下,不然可能忽略到这个小问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)