[C++基础]位运算应用——创建guid

本文详细介绍了位运算的概念及其应用,包括按位或、按位与、按位右移和按位左移,并通过实例展示了如何使用这些运算进行RGB色彩的合并与分离。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
|(按位或):x|y=z(z>=x、y),想想x,y各个二进制位一一对齐,只有对应为上有1,就取1,最后就得到了x,y的更大值。"|"可以简单认为是就获取更大值的操作运算符
&(按位与):x|y=z(z<=x、y),想想x,y各个二进制位一一对齐,只有对应为上有0,就取0,最后就得到了x,y的更小值。"&"可以简单认为是就获取更小值的操作运算符
>>(按位右移):x|y=z,想想x的二进制位右移y位(不要有小数点的想法,以为是一对小数点呢,哎,之前它一直困扰我),也就是从x二进制位的末端抹去y个位
<<(按位左移):x|y=z,想想x的二进制位左移y位,也就是在x的二进制位的末尾增增加y个0。
*/

//RGB色彩合并
int ColorMerge(int r,int g,int b)
{
    //24位的rgb值=r占8位+g占8位+b占8位
    //在r的二进制位末尾增加16个0,在g的二进制位的末端增加8个0,最后,r、g、b的各个二进制位取1
    return r << 16 | g << 8 | b;
}
//RGB色彩分理
void ColorSeparate(int rgb)
{
    //24位的rgb值=r占8位+g占8位+b占8位
    int r = rgb >>16;//去掉末尾16个二进制位
    int g = rgb >>8 & 0xff;//0xff-->255-->由8个1组成的二进制位,去掉末尾8个二进制位后,
    int b = rgb & 0xff;
}
uint64 CreateObjID(int platfromid,int serverid,int curTime,int seed)
{ 
    // create guid
    //二进制位,seed(随机种子)占16位,curTime(时间戳)占32位,serverid(服务器id)占8位,platfromid(平台id)随机占8,总64位
    uint64 guid = ((platfromid)<<(8+32+16)) | ((serverid)<<(32 + 16)) | ((curTime)<<16) | ((seed)&0xffff);
    return guid;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值