当前位置: 首页 > ai >正文

【C语言】:巧用移位操作符,位操作符解决问题

目录

1.不能创建临时变量,实现两个整数的交换

方法一:加减减,竟可互换

方法二:巧用按位异或

 2.求一个整数储存在内存的二进制中1的个数

方法一:“%”---“/” 两板斧

方法二:巧用左移操作符和按位与

方法三:n&(n-1)算法


1.不能创建临时变量,实现两个整数的交换

方法一:加减减,竟可互换

#include <stdio.h>int main()
{int a = 5;int b = 3;printf("交换前:a=%d,b=%d\n",a,b);a = a + b;b = a - b;a = a - b;printf("交换后:a=%d,b=%d\n",a,b);//当a,b足够小,但是a+b太大时,可能会溢出return 0;
}

注意:虽然这个方法可以符合要求的交换两个整数,但是有问题的,如果a与b非常大,但是没超出整型大小,然而a+b却有可能溢出,因此这个方法只能解决一部分的情况。

方法二:巧用按位异或

#include <stdio.h>int main()
{int a = 5;int b = 3;printf("交换前:a=%d,b=%d\n", a, b);//a^a=0//0^a=aa = a ^ b;b = a ^ b;//b=a^b^b=aa = a ^ b;//a=a^b^a=bprintf("交换后:a=%d,b=%d\n", a, b);//二进制相同位0,相异为1,并不会存在进位问题,所以不会有溢出return 0;
}

使用这个方法我们需要对按位异或运算有所认识,并

http://www.xdnf.cn/news/11128.html

相关文章:

  • 终端服务Terminal Service的几个使用技巧
  • 【详细介绍使用说明】echarts图表插件
  • sort和stable_sort的区别和联系
  • JAVA基于J2ME的手机游戏开发(毕设+实现+源码+数据库)
  • 【MATLAB】进阶绘图 ( 双 y 轴图形 | plotyy 函数 | Histogram 统计图形 | hist 函数 )
  • eclipse che安装教程
  • 11 年了,我在 CSDN 被访问 800 万+次! 被点赞 3.5 万+次,被收藏 9.6 万+次!
  • 安卓10拨号流程梳理
  • NRF2401无线通信
  • java编程指南100本电子书
  • 网络***实战——使用wirelesskeyview轻松获取无线密码
  • 《魔兽世界》10个让你感动流泪的故事
  • 开源计算机视觉库OpenCV详解
  • FPGA开源网站和论坛介绍
  • 6to4 自动隧道技术
  • c语言printf()输出格式大全
  • 计算机的组成
  • 纪中2016.10.6比赛不明总结
  • 关于Excel提示外部源的链接无法删除的解决方法(附强制解除办法)
  • 汇编语言快速入门(非常详细)
  • 悄悄蒙上你的眼睛 后门程序知识完全解析
  • c语言基础知识 入门必看(保姆级教学)
  • 设计模式—六大原则—里氏代换原则
  • 打字侠支持新世纪五笔、86版五笔、98版五笔打字练习:初学者的最佳选择
  • CentOS使用DNF配置
  • 无线蹭网工具奶瓶Beini使用教程
  • 关于InstantiationException错误的原因
  • 《周易》乾卦爻辞
  • 工作队列-schedule_delayed_work()用法
  • CC2630 CC2650 zigbee开发系列之入门 第1步