位运算和伪随机数

#include <stdio.h>
#define N 30

void main()
{
 //1.去掉最后一位:
 int i = 19;
 i = i >> 1;
 printf("%d", i);
 */
//2.在最后加上一个0
 /*
 int ip=10;
 ip = ip << 1;
 printf("%d", ip);
 */
//3.在最后加上一个1
 /*
 int io=10;
 io = io << 1+1;
 printf("%d", io);
 */
//4.把最后一位变成1;
 int x=21;
 x = x | 1;
 //x = x | (x + 1);
 printf("%d", x);
//5.把最后一位变成0;
 x = x | 1 - 1;
 //x = x | (x + 1)-1;
 printf("%d", x);
//6.最后一位取反;
 x = x ^ 1;
 printf("%d", x);
//7.把右数第k位变成1;
 int k = 3;
 x = x | (1 << (k - 1));
//8.把右数第k位变成0;
 x = x&!(1 << (k - 1));
//9.右数第k位取反;
 x = x ^ (1 << (k - 1));
//10.取末三位;
 x = x&((1<<2)+(1<<1)+1);
//11.取末j位;
 int j = 5;
 x = x&(1<<j-1);
//12.取右数第k位;
 int k = 4;
 x = x >> (k - 1);
 if(x%2==0)
  printf("0");
 else
  printf("1");
//x>>(k-1)&1
//13.把右边连续的1变成0;
 x = x&(x + 1);
 printf("%d", x);
//14.把右边第一个0变成1;
 x = x | (x + 1);
 printf("%d", x);
//15.把右边连续的0变成1;
 x = x | (x - 1);
 printf("%d", x);
}
//^(异或),相同为0,不同为1;
//交换两个数,不用临时变量;
void main()
{
int I=10;
int j=20;
/*第一种*/
i=i+j;
j=i-j;
i=i-j;
/*第二种*/

i=i^j;
j=I^j;

I=I^j;
}

//随机数的小应用程序
void main()

{

char *name[] = {"        ","       ",......};

time_t temp;

time(&temp);

int len = sizeof(name)/sizeof(name[0]);

srand(temp);

int res = rand()% len;

printf("%s\n",name[res]);

int i;

scanf("%d",&i);

}
/*

rand()函数用来产生随机数,但是是伪随机数。所以需要用srand()函数来设置随机数种子,如果没有设置,自动设置随机种子是1;
int munber =rand()%100;//使用rand()产生0~100以内的随机数字
time_t实际上是长整形long int
*/





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值