A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

5黑马币
int len = sizeof(n)*8;
int temp;
for (int i = 0 ; i < len ; i++){
         temp = n;
         temp = temp >>31 -i;
         int t = temp & 1;
          printf("%d",t);

         printf("\n");
}
这只写了个被调函数,想问下 上述函数中 temp=temp>>31-i;表达式,会不会出现31-i<0的情况,为什么?若出现了怎么办?
谢谢

最佳答案

查看完整内容

只要保证传递给函数的参数n是int型,就不会出现小于0的情况 因为sizeof(n)=sizeof(int)=4 所以len = 4*8 =32 也就是四个字节长度,所以 for (int i = 0 ; i < (len=32) ; i++) 31-i >0 恒为真 如果怕出现负的情况,可以添加一个判断语句 if(31-i>0) temp = temp >>31 -i;

2 个回复

倒序浏览
只要保证传递给函数的参数n是int型,就不会出现小于0的情况
因为sizeof(n)=sizeof(int)=4
所以len = 4*8 =32 也就是四个字节长度,所以
for (int i = 0 ; i < (len=32) ; i++)
    31-i >0  恒为真
如果怕出现负的情况,可以添加一个判断语句
if(31-i>0)
  temp = temp >>31 -i;
回复 使用道具 举报
fmi110 发表于 2015-7-30 09:13
只要保证传递给函数的参数n是int型,就不会出现小于0的情况
因为sizeof(n)=sizeof(int)=4
所以len = 4*8 =3 ...

懂啦 谢谢哈
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马