K<<=1和k*2有什么区别吗??

「已注销」 2017-04-25 09:27:10
K<<=1和k*2有什么区别吗??
...全文
1152 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 版主 2017-04-25
  • 打赏
  • 举报
回复
前者直接移位,如果有符号数会导致符号位有变化,后者不用担心这个问题
「已注销」 2017-04-25
  • 打赏
  • 举报
回复
引用 8 楼 赵4老师的回复:
仅供参考:
#include <stdio.h>
unsigned short int ui;
  signed short int si;
int main() {
	ui=(unsigned short int)0x8000u;
	si=(  signed short int)0x8000;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);
	ui=ui>>1;
	si=si>>1;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);

	printf("--------------\n");
	ui=(unsigned short int)0x8000u;
	si=(  signed short int)0x8000;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);
	ui=((  signed short	int)ui)>>1;
	si=((unsigned short	int)si)>>1;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);

	return 0;
}
//ui=32768
//si=-32768
//ui=16384
//si=-16384
//--------------
//ui=32768
//si=-32768
//ui=49152
//si=16384
厉害喽这样一看就明白啦
「已注销」 2017-04-25
  • 打赏
  • 举报
回复
厉害喽这样一看就明白啦
「已注销」 2017-04-25
  • 打赏
  • 举报
回复
赵4老师 2017-04-25
  • 打赏
  • 举报
回复
仅供参考:
#include <stdio.h>
unsigned short int ui;
  signed short int si;
int main() {
	ui=(unsigned short int)0x8000u;
	si=(  signed short int)0x8000;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);
	ui=ui>>1;
	si=si>>1;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);

	printf("--------------\n");
	ui=(unsigned short int)0x8000u;
	si=(  signed short int)0x8000;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);
	ui=((  signed short	int)ui)>>1;
	si=((unsigned short	int)si)>>1;
	printf("ui=%u\n",ui);
	printf("si=%d\n",si);

	return 0;
}
//ui=32768
//si=-32768
//ui=16384
//si=-16384
//--------------
//ui=32768
//si=-32768
//ui=49152
//si=16384
lin5161678 2017-04-25
  • 打赏
  • 举报
回复
<<= 请和 *=2 比较 << 才和 *2比较
欧阳春晖 2017-04-25
  • 打赏
  • 举报
回复
在很久以前,因为性能原因,常用位运算模拟加减乘除
欧阳春晖 2017-04-25
  • 打赏
  • 举报
回复
在有符号的情况下 左移动一位相当于*2 但是注意,根据语言标准,并未明确规定有符号左移和无符号左移 但一般情况下 当K是无符号的时候,左移为无符号左移,当K是有符号的情况下,左移则是有符号左移
幻夢之葉 2017-04-25
  • 打赏
  • 举报
回复
引用 3 楼 jianwen0529 的回复:
左移一位 不等于 *2(有符号的情况,左移对于符号位的处理并没有强制规定)
还有你应该问 k <<= 1 和 k *= 2 是否有区别,大小写敏感呢,而且 k * 2 并没有赋值给k
幻夢之葉 2017-04-25
  • 打赏
  • 举报
回复
左移一位 不等于 *2(有符号的情况,左移对于符号位的处理并没有强制规定)
vnvlyp 2017-04-25
  • 打赏
  • 举报
回复
引用 1 楼 qq_36782456 的回复:
有一点区别 一般情况下 第二种如果接收值依然为k, 就会没有区别, 如果接收值不为k,则两种结果后k的值会不相同, 还有当k的值为0时,结果会不同
k为0时k << 1和k * 2不都是0,为什么会不一样
时光若止-Dale 2017-04-25
  • 打赏
  • 举报
回复
有一点区别 一般情况下 第二种如果接收值依然为k, 就会没有区别, 如果接收值不为k,则两种结果后k的值会不相同, 还有当k的值为0时,结果会不同
赵4老师 2017-04-25
  • 打赏
  • 举报
回复
引用 7 楼 lin5161678 的回复:
<<= 请和 *=2 比较 << 才和 *2比较
有道理

64,654

社区成员

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

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