C语言中 移位左移和循环左移,有区别吗
答案:6 悬赏:60 手机版
解决时间 2021-11-24 07:47
- 提问者网友:暮烟疏雨之际
- 2021-11-23 16:01
C语言中 移位左移和循环左移,有区别吗
最佳答案
- 五星知识达人网友:轻熟杀无赦
- 2021-11-23 16:28
在C中,左移是逻辑算术,右移是算术右移,会保持符号位不变.
实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
1、左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:
int i = 1;
i = i << 2; //把i里的值左移2位
也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了。
2、右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:
int i = 0x80000000;
i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000
就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.
1、左移就是把一个数的所有位都向左移动若干位,在C中用<<运算符.例如:
int i = 1;
i = i << 2; //把i里的值左移2位
也就是说,1的2进制是000...0001(这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0),左移2位之后变成 000...0100,也就是10进制的4,所以说左移1位相当于乘以2,那么左移n位就是乘以2的n次方了。
2、右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:
int i = 0x80000000;
i = i >> 1; //i的值不会变成0x40000000,而会变成0xc0000000
就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.
全部回答
- 1楼网友:老鼠爱大米
- 2021-11-23 21:36
有!
- 2楼网友:天凉才是好个秋
- 2021-11-23 20:06
有的
- 3楼网友:笑迎怀羞
- 2021-11-23 19:31
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去,依次循环下去
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去,依次循环下去
- 4楼网友:北方的南先生
- 2021-11-23 17:57
移位左移就是在二进制数的左侧补0,补多少个0,右侧就去除几位。循环左移不用去除
- 5楼网友:七十二街
- 2021-11-23 17:37
首先说这不是C语言吧
应该说是汇编语言
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去(或者CF中)
如果不考虑CF则为10101011
考虑CF
CF=1时候10101011
CF=0时候10101010
应该说是汇编语言
比方说一个btye里面存着下列数据11010101
位置左移则最右边补个0为10101010
循环左移是把最左边的1挪动到右边去(或者CF中)
如果不考虑CF则为10101011
考虑CF
CF=1时候10101011
CF=0时候10101010
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯