返回首页

c语言左移和循环左移的区别?

188 2023-12-24 05:24 admin

在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,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

顶一下
(0)
0%
踩一下
(0)
0%
相关评论
我要评论
用户名: 验证码:点击我更换图片

网站地图 (共14个专题18469篇文章)

返回首页