专业IT网络知识平台,分享IT百科知识、生活百科知识解答!

易企推科技
易企推科技

如何理解C语言中左移和右移运算符

来源:小易整编  作者:小易  发布时间:2024-03-20 08:04
摘要:c语言中左移表示左移运算符,就是把最高位丢弃掉然后在最低位补0;而c语言中的右移就是右移运算法,与左移是相反的,它是往右边挪动若干位。C语言中左移和右移运算符的用法:左移运算符就是把最高位丢弃掉然后在最低位补0;右移运算法与左移是相反的,它...

c语言中左移表示左移运算符,就是把最高位丢弃掉然后在最低位补0;而c语言中的右移就是右移运算法,与左移是相反的,它是往右边挪动若干位。

如何理解C语言中左移和右移运算符

C语言中左移和右移运算符的用法:左移运算符就是把最高位丢弃掉然后在最低位补0;右移运算法与左移是相反的,它是往右边挪动若干位

C语言中左移和右移运算符是C语言中的运算符,接下来在文章中将为大家具体介绍这两个运算符是如何使用的,具有一定的参考价值,希望对大家有所帮助

【推荐课程:C语言教程

先说左移,左移就是把一个数的所有位都向左移动若干位,在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次方了(有符号数不完全适用,因为左移有可能导致符号变化,下面解释原因)需要注意的一个问题是int类型最左公交车上没报m端的符号位和移位移出去的情况.我们知道,int是有符号的整形数,最左端的1位是符号位,即0正1负,那么移位的时候就会出现溢出,例如:

int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000i = i << 1;
登录后复制

那么,i在左移1位之后就会变成0x80000000,也就是2进制的100000...0000,符号位被置1,其他位全是0,变成了int类型所能表示的最小值,32位的int这个值是-2147483648,溢出.如果再接着把i左移1位会出现什么情况呢?在C语言中采用了丢弃最高位的处理方法,丢弃了1之后,i的值变成了0.左移里一个比较特殊的情况是当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:

int i = 1, j = 0x80000000; //设int为32位i = i << 33;   // 33 % 32 = 1 左移1位,i变成2j = j << 33;   // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃
登录后复制

在用gcc编译这段程序的时候编译器会给出一个warning,说左移位数>=类型长度.那么实际上i,j移动的就是1位,也就是33%32后的余数.在

gcc下是这个规则,别的编译器是不是都一样现在还不清楚.

总之左移就是:丢弃最高位,0补最低位

再说右移,明白了左移的道理,那么右移就比较好理解了.右移的概念和左移相反,就是往右边挪动若干位,运算符是>>.右移对符号位的处理和左移不同,对于有符号整数来说,比如int类型,右移会保持符号位不变,例如:

int i = 0x80000000;i = i >> 1;  //i的值不会变成0x40000000,而会变成0xc0000000
登录后复制

就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

负数10100110 >>5(假设字长为8位),则得到的是  11111101
登录后复制

总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多. 

以上就是如何理解C语言中左移和右移运算符的详细内容,更多请关注易企推科技其它相关文章!


本文地址:网络知识频道 https://www.hkm168.com/jiqiao/1151093.html,易企推百科一个免费的知识分享平台,本站部分文章来网络分享,本着互联网分享的精神,如有涉及到您的权益,请联系我们删除,谢谢!


网络知识
小编:小易整编
相关文章相关阅读
  • excel如何插入单元格

    excel如何插入单元格

    excel插入单元格的方法:首先单击上方【开始】菜单;然后在弹出新窗口以后,选择【单元格】;接着单击【插入】下的小三角,下方出现新窗口,再点击【插入单元格】;最后根据需要选择移动选项即可。excel插入单元格的方法:1、首先单击上方【开始】...

  • 如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发

    如何使用Vue技术进行移动端开发随着移动互联网的迅猛发展,移动端应用的开发变得越来越重要。Vue.js作为一款轻量级、高性能的前端框架,被广泛应用于移动端开发中。本文将介绍如何使用Vue技术进行移动端开发,并给出具体的代码示例。一、准备工作...

  • 三星电视如何投屏

    三星电视如何投屏

    三星电视可以通过三星电视自带的投屏功能、三星电视官方投屏应用程序和第三方投屏应用程序来投屏。详细介绍:1、三星电视自带的投屏功能,在三星电视遥控器上按下“source”或“输入”按钮,选择“screenmirroring”选项,然后打开要...

  • 如何清理魔兽世界插件缓存

    如何清理魔兽世界插件缓存

    魔兽世界缓存文件1、第一步,找到你电脑桌面上的【我的电脑】图标,然后点击打开。第二步:打开我的电脑后,在我的电脑里面找到wow的安装文件夹。第三步:打开wow的安装文件夹后,在文件夹内选择wtf文件夹直接删除。2、Cache是WOW的缓存文...

  • 如何取消PPT中的所有动画效果和声音

    如何取消PPT中的所有动画效果和声音

    当我们为ppt添加了动画效果后,有时又会发现需要取消这些动画效果。那么,ppt动画效果怎么全部取消?幸运的是,powerpoint提供了一种简单而高效的方法。下面小编就来为大家讲讲如何去掉ppt的动画效果,让观众更好地关注您想要传达的信息。...

  • 如何申请域名

    如何申请域名

    申请步骤:1、准备申请资料;2、寻找域名注册商;3、查询域名;4、正式申请;5、申请成功。详细介绍:1、准备申请资料:如果是个人申请域名,需要准备个人身份证;如果是企业申请域名,需要提供企业营业执照。若是的域名,目前只给企业申请使用,个人无...

  • html如何解析%%

    html如何解析%%

    html是一种用于创建网页结构的标记语言,它提供了一种方式来标记文本、图像、链接以及其他与网站相关的内容。html可以在网页中插入各种元素,包括表格、列表、图像、表格等等。本文将讨论html的解析过程以及如何编写有效的html代码。HTML...

  • 如何正确发音 苹果的Mac ?

    如何正确发音 苹果的Mac ?

    导语:今天本站来给各位分享关于苹果mac怎么读英文的相关内容,如果能正好解决你现在面临的问题,别忘了关注本站,现在开始吧!求苹果笔记本MAC的英语读音读音:美[mk],英[mk](Mac)麦金塔电脑,苹果个人计算机;词义:是Media...

  • 周排行
  • 月排行
  • 年排行

精彩推荐