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

c#面试基础语法——现有⼀个整数number,请写⼀个⽅法判断这个整数是否是2的N次⽅

1.number%2==0

取余(取模)只能判断number是不是2的倍数但不一定是2的N次方,如:6%2==0但是他并不是2的N次方

2.(number&(number-1))==0

原理:如果number是2的N次方则表示2进制位只有一位是1。如:2 (10) 4(100) 8(1000) 16(10000) 那么number-1就会得到一个低位全部是1的2进制数 1(01) 3(011)

拿8做例子

8  1000

7  0111

&  0000

结果就是0   

当一个整数是2的N次方时,它的二进制表示只有一位是1,其余位都是0。例如,2的3次方是8,其二进制表示为00001000;2的4次方是16,其二进制表示为00010000

如果我们将一个2的N次方的整数减去1,会得到一个所有低位都是1的数。例如,对于2的3次方的整数8,减去1得到7,其二进制表示为00000111;对于2的4次方的整数16,减去1得到15,其二进制表示为00001111

当我们对这两个数进行按位与操作 (number & (number - 1)),如果结果等于0,则表示只有一位是1,也就是指定的整数是2的N次方。

举个例子,假设我们要判断整数12是否是2的N次方。其二进制表示为00001100。我们可以进行计算:

12       : 00001100
12 - 1   : 00001011
AND 操作 : 00001000

结果是00001000,不等于0,说明12不是2的N次方。

public static bool IsPowerOfTwo(int number)
{// 判断是否为负数或零if (number <= 0)return false;// 使用位运算判断是否只有一位是1return (number & (number - 1)) == 0;
}
private static boolean isPowerOfTwo(int n) {return (n > 0) && ((n & (n - 1)) == 0);
}

如果计算这个数是2的N次方得出返回N这个值

 public static int getExpontOfTwo(int number){if(number <=0 || (number & (number -1)) != 0){return -1;}int expont = 0;while(number != 1){number >>= 1;expont++;}return expont;}}

http://www.lryc.cn/news/261235.html

相关文章:

  • 27系列DGUS智能屏发布:可实时播放高清模拟信号摄像头视频
  • YOLOv8改进 | 2023主干篇 | 替换LSKNet遥感目标检测主干 (附代码+修改教程+结构讲解)
  • 【工具】VUE 前端列表拖拽功能代码
  • 人工智能与量子计算:开启未知领域的智慧之旅
  • 2023了,前端实现AI电子秤思路分析
  • CSS学习
  • Flask基本用法:一个HelloWorld,搭建服务、发起请求
  • Tomcat-安装部署(源码包安装)
  • 【Hadoop_06】MapReduce的概述与wc案例
  • Qt点击子窗口时父窗口标题栏高亮设计思路
  • 掌握iText:轻松处理PDF文档-高级篇-添加水印
  • 深度学习基本概念
  • 2023年最详细的:本地Linux服务器安装宝塔面板,并内网穿透实现公网远程登录
  • 基于ssm金旗帜文化培训学校网站的设计与开发论文
  • 【Java】猜数字小游戏
  • 汽车EDI:Chrysler EDI项目案例
  • Locust:可能是一款最被低估的压测工具
  • 用23种设计模式打造一个cocos creator的游戏框架----(十八)责任链模式
  • 100天精通风控建模(原理+Python实现)——第9天:风控建模中为什么需要特征工程?
  • 【PHP】计算某个特定时间戳距离现在的天数
  • lv12 uboot移植深化 9
  • 大数据与深度挖掘:如何在数字营销中与研究互动
  • xtu oj 1327 字符矩阵
  • 讨论用于评估DREX的五种DR指标
  • 基于SpringBoot的在线疫苗预防小程序
  • Kafka使用总结
  • 2023 年山东省职业院校技能大赛(高等职业教育) “信息安全管理与评估”样题
  • Apache Web 服务器监控工具
  • MySQL执行语句 Table ‘mysql.servers‘ doesn‘t exist
  • 在datagridview列显示下拉操作