奇怪的问题
//随机生成6位数#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main(void)
{
int n,number;
srand(time(0));
while(1)
{
puts("你想要多少个随机数?");
scanf("%d",&number);
for(n=0;n<number;n++)
printf("%d ",rand()&6+1);
putchar('\n');
}
return 0;
}
----------------解决方案--------------------------------------------------------
这个for循环里的 printf("%d ",rand()&6+1);(将%误打为&),结果也能运行,随机数的范围为0-7,这是合法的C语句吗?
----------------解决方案--------------------------------------------------------
printf("%d ",rand()&6+1);
我觉得这里 & 是表示把rand()产生的数(我也不知道它产生的范围是多少?)和6做一下“与”而已;
不可否认这样是可以的,而范围也不超过7,但意义和rand()%6+1完全不同了。
----------------解决方案--------------------------------------------------------
没人回?顶一下。
----------------解决方案--------------------------------------------------------
以下是引用csight在2006-11-27 20:12:00的发言:
printf("%d ",rand()&6+1);
我觉得这里 & 是表示把rand()产生的数(我也不知道它产生的范围是多少?)和6做一下“与”而已;
不可否认这样是可以的,而范围也不超过7,但意义和rand()%6+1完全不同了。
printf("%d ",rand()&6+1);
我觉得这里 & 是表示把rand()产生的数(我也不知道它产生的范围是多少?)和6做一下“与”而已;
不可否认这样是可以的,而范围也不超过7,但意义和rand()%6+1完全不同了。
和6做一下“与”是什么意思,我刚学C很多命令还没学全。。
----------------解决方案--------------------------------------------------------
也就是,把int型等数据类型,按二进制排列后,如果相同位为1时,则结果的该位为1,else为0
----------------解决方案--------------------------------------------------------
我认为:6为110则生成的数有0,2,4,6这四个!但是结果不是,不知道是类型不同的原因还是其他的原因
[此贴子已经被作者于2006-11-27 21:27:59编辑过]
----------------解决方案--------------------------------------------------------
rand()&6+1 这个表示 rand() & 7
&是按位与,即一位一位的与
也即 (一个随机数) & 00000111
----------------解决方案--------------------------------------------------------
哦,对了后边有个1,哈哈
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void main()
{
int a[6],i,j,n;
printf("请问要产生几个6位数?");
scanf("%d",&n);
srand((unsigned)time(NULL));
for(i=0;i<n;i++)
{
printf("%d : ",i+1);
for(j=0;j<6;j++)
{
a[j]=rand()%7;
if(j==0&&a[j]==0)
{
j=-1;
continue;
}
printf("%d",a[j]);
}
printf("\n");
}
}
----------------解决方案--------------------------------------------------------