[C++基礎]位運算應用——創建guid
/*
|(按位或):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;
}