这里为什么需要左移16位

勤奋的执着 2017-11-29 01:28:01
	
//1005转换成0x1005
int covert(int decimal)
{
har temp[10], *p;
int hex=0;

sprintf(temp, "%d", decimal);
for (p=temp; *p != '\0'; p++ )
{
hex += *p-'0';
if ( strlen(p) != 1)
hex = hex * 16;
}
return hex;
}

int main()
{
int userid = covert((int)getuid()) << 16;
msgget((0x55552134 + userid), 0666 | IPC_CREAT | IPC_ALLOC);
//后面省略
...
return 0;
}


请问下各位,为什么需要把userid左移16位?? 谢谢~
...全文
1133 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
勤奋的执着 2017-11-29
  • 打赏
  • 举报
回复
引用 6 楼 paschen 的回复:
相当于将一个int的低16位移到高16位
是移到高位了,可是意义是什么,不移位创建共享内存也没问题。 可能是我想太多,这个移位操作或许没有任何特殊意义,只是为了创建一个唯一的共享内存段吧。
勤奋的执着 2017-11-29
  • 打赏
  • 举报
回复
引用 2 楼 iloveyou418 的回复:
0x55552134 + userid看这里 int是32位的情况下: 0x1005在编译器眼里就是0x00001005 左移16位就会变成0x10050000. 所以int左移16的意义一是去高位,二是让usrid满足key相对应格式要求 不知道说的对不对~
感觉跟我想法是一样的,我感觉左移没有任何意义,可能就是为了创建共享内存时候,变一下内存段起始地址
勤奋的执着 2017-11-29
  • 打赏
  • 举报
回复
引用 4 楼 hdt 的回复:
这段代码感觉逻辑有问题啊! 把一个10进制数的字面表示,转为16进制 有脱裤子放屁的感觉。 至于左移16位,似乎是要在一个整型的低16位放置一些信息。 不知道具体的需求,光凭代码的片段,无法了解真相。
前人留下的精华,也没个注释,我看着也是一脸懵比,低16位什么都没放,看起来就像故意转换一下作为一个共享内存起始地址
paschen 版主 2017-11-29
  • 打赏
  • 举报
回复
相当于将一个int的低16位移到高16位
Blurry%B7Face 2017-11-29
  • 打赏
  • 举报
回复
等大佬
真相重于对错 2017-11-29
  • 打赏
  • 举报
回复
这段代码感觉逻辑有问题啊! 把一个10进制数的字面表示,转为16进制 有脱裤子放屁的感觉。 至于左移16位,似乎是要在一个整型的低16位放置一些信息。 不知道具体的需求,光凭代码的片段,无法了解真相。
  • 打赏
  • 举报
回复
这是进制移位操作 有请下面大神详解!!
CT8100 2017-11-29
  • 打赏
  • 举报
回复
0x55552134 + userid看这里 int是32位的情况下: 0x1005在编译器眼里就是0x00001005 左移16位就会变成0x10050000. 所以int左移16的意义一是去高位,二是让usrid满足key相对应格式要求 不知道说的对不对~
AlbertS 2017-11-29
  • 打赏
  • 举报
回复
不懂是什么意思,不晓得你的参数要求,我只能帮你顶一下了

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧