为什么得不到正确的结果呢?该如何处理
为什么得不到正确的结果呢?
我实现了随机生成一个32位的整数,它的最高位为1,倒数第二位为0。产生後我又用程序去测试这个随机数,但结果却不正确。我不知道是什么原因,请高手指点。
srand(time(NULL));
unsigned long a = rand();
a = ((a < <1)|(a&1))&(~2);
a = a|(rand() < <16);
a |= 0x80000000; // 产生的随机数没有问题,满足我的要求。
if( (a & 0x80000000 ==0x80000000) && (a & 2 == 0) )
printf( "The number is right! "); // 没有执行。
------解决方案--------------------
谁能一个语句一个语句的解释一下这个题目的 含义吗?
特别希望 希望能读懂
谢谢了
---------------------------
一句一句分析如下:
unsigned long a = rand(); //从程序上下文判断rand()返回一个16位随机数
a = ((a < <1)|(a&1))&(~2); //a左移1位再或上最低位,这时候最低的两位都是原来的最低位,然后&(~2)也就是置最低的第二位为0,至此低16位搞定了
a = a|(rand() < <16); //高16位再随机生成一次跟低16位叠加上
a |= 0x80000000; // 把最高位置1。
我实现了随机生成一个32位的整数,它的最高位为1,倒数第二位为0。产生後我又用程序去测试这个随机数,但结果却不正确。我不知道是什么原因,请高手指点。
srand(time(NULL));
unsigned long a = rand();
a = ((a < <1)|(a&1))&(~2);
a = a|(rand() < <16);
a |= 0x80000000; // 产生的随机数没有问题,满足我的要求。
if( (a & 0x80000000 ==0x80000000) && (a & 2 == 0) )
printf( "The number is right! "); // 没有执行。
------解决方案--------------------
谁能一个语句一个语句的解释一下这个题目的 含义吗?
特别希望 希望能读懂
谢谢了
---------------------------
一句一句分析如下:
unsigned long a = rand(); //从程序上下文判断rand()返回一个16位随机数
a = ((a < <1)|(a&1))&(~2); //a左移1位再或上最低位,这时候最低的两位都是原来的最低位,然后&(~2)也就是置最低的第二位为0,至此低16位搞定了
a = a|(rand() < <16); //高16位再随机生成一次跟低16位叠加上
a |= 0x80000000; // 把最高位置1。