位运算——判断整数a是否可被2的幂(2、4、8、16……)整除?

判断整数是否为2的幂:从循环除法到位运算的边界处理 在算法与编程基础中,判断一个整数是否为2的幂是高频入门题,其核心不在于简单遍历,而在于理解二进制数的本质特性。2的幂在二进制中仅有一个最高位为1,其余位为0,这一特征催生了 n & (n - 1) 这一经典的位运算技巧,通过清除最低位的1来快速判定。相比循环除法,位运算具有 O(1) 的时间复杂度与更贴近计算机底层执行的性能优势,在哈希表容量设计、内存对齐、图像处理等真实工程场景中亦有广泛应用。然而,实现时需格外关注0、负数、整数溢出等边界条件,否则容易产生误判。本文系统梳理循环除法、递归、位运算与查表法等 阅读详情

// 大部分位运算的技巧早在几十年前就被前辈们在有限的计算环境下“榨”出来了。
// “原创”只是表示这篇文章是我所写,并非翻译或转贴,但也绝不是我“首创”。

能被2^N整除(N >= 1),则a的二进制表示中,低N位全为0,因此:

(a %  2)  <==> (a &  1)
(a %  4)  <==> (a &  3)
(a %  8)  <==> (a &  7)
(a % 16)  <==> (a & 15)  <==> (a & ((1 << 4) - 1))
……

现在的编译器已经足够聪明,上面左边的表达式很可能会被自动优化,所以可能看不出求余与按位与的性能差距。
但能在DEBUG模式下快一点,还是有价值的。(设想正常要跑一分钟的程序,调试时需要10分钟才能运行到你所下的断点,会是多么痛苦……)

JavaScript编程:判断整数是否能被另一个整数整除 在JavaScript中,我们经常需要判断一个整数是否能被另一个整数整除。这在许多应用中都是很常见的需求,例如校验输入的合法性、数据筛选和逻辑控制。本文将介绍几种判断整数是否能被另一个整数整除的方法,并附上相应的源代码示例。 阅读详情

相关推荐

Dify部署后访问报502?手把手教你排查和修复Nginx反向代理问题

本文针对Dify部署后常见的502 Bad Gateway错误,提供了从基础容器状态检查到Nginx配置与Docker网络诊断的完整排查流程。详细解析了错误本质,并给出动态服务发现修复与静态IP配置两种解决方案,帮助开发者彻底解决Nginx反向代理问题,确保Dify平台稳定访问。

rnn9storyteller的博客 1096

使用位运算判断是否为2的n次方

问题:给定一个数字,判断他是否为2的n次方 第一种方法:我们会发现如果是数字符合2的n次方的话,他有一个特点:就是让他一直除以2最终他会得到1.否则的话就不符合条件。所以就会写出一下代码 def power_2(n): if n == 0: return False while(n % 2 == 0 ): n = n / 2 if n ==...

qq_42166308的博客 1579

实战详细讲解Qt插件plugin的编写与用法

qt插件的开发,可以说是动态库的开发,因为调用方式类似,多熟悉一下,利用Qt框架开发很简单的。在想想这种调用过程有的熟悉,比如公司买了一堆摄像头,公司要对摄像头进行二次开发,实现自己想要的功能,集成到一套设备里去,然后在卖给用户。此时厂商肯定会提供开发文档,并给你SDK包(软件开发工具包), 包里你会发现只有头文件和一堆库文件,没有源文件,因为实现的过程是产商公司保密的,给你看还得了。所以都封装成了库的形式给你调用,如静态库或者动态库。

qq_44667165的博客 1万+

C/C++编程学习 - 第21周 ⑩ 2的幂整除

题目链接 题目描述 给一个正整数n,计算它最多能被2的多少次幂整除 Input 输入一个数n Output 输出一个数 Sample Input 896 Sample Output 7 思路 一直将n除以2,如果满足n%2==0就继续除,看看除了多少次。 C++代码: #include<bits/stdc++.h> using namespace std; int main() { int n; while(cin >> n) { int ans = 0; whil

水蛙菌 1万+

【Docker】Docker安装Hadoop分布式集群

hadoop目录安装在:/usr/local/hadoop-2.7.0/etc/hadoop。访问Hadoop102:9870,查看是否能够看到hdfs界面。访问hadoop103:8088,查看能够看到yarn界面。在yarn上可以看到执行情况。

weixin_46429290的博客 3459

DID实战指南:从平行趋势检验到PSM-DID的Stata全流程解析

本文详细解析了双重差分法(DID)在政策评估中的应用,从平行趋势检验到PSM-DID的Stata全流程操作。通过实例演示和代码示例,帮助研究者掌握DID方法的核心逻辑、前提条件验证及稳健性检验技巧,提升因果推断研究的准确性。

weixin_29234239的博客 741

检测一个数能否被3整除----位运算

第一个解决方案就是小学就学过的,如果一个数的每个位相加之和能被3整除,则这个数就可以被3整除。例如612各位之和为9,则可以被3整除。但是这个解决方法并不高效,我们需要取得每一位,然后再一个个相加。 观察二进制,我们可以找到一个模式来判断一个数能否被3整除。如果所有的偶数位出现1的次数为 even_count, 奇数位出现1的次数为 odd_count,两者只差如果是3的倍数,那么这个数就是3倍

半壶老酒 5255

线性代数知识点整理

线性代数基础知识点摘要整理

cuguanren的博客 3万+

位运算之美——用+,-和位运算实现整数除法和取模(一)

位运算之美——用+,-和位运算实现整数除法和取模(一)  今天看了一位师兄去年的笔经总结,其中有一题是“不许用%和/来实现求任意数除以3的余数”,我想考官的目的应该是想考察学生对位运算的熟悉程度吧,于是我把题目扩展成“只能用+,-和位运算实现整数除法(/)和取模(%)”,注意:这里不能使用其它的库例程来辅助计算,如log,log10等。在思考这道题目的过程中,我又涉及到了许多二进制相关的题

zht_304的专栏 4230

浅谈向量检索

文章目录浅谈向量检索背景什么是向量什么是向量检索距离度量检索方法ANN的基本思路举个容易理解栗子举个正常的例子具体算法树方法KD-TreeAnnoyHash方法LSH 算法矢量量化方法乘积量化码本的建立码字搜索算法倒排乘积量化临近图方法HNSW 算法朴素想法Delaunay算法NSW 主要思想NSW构图NSW查找参考 浅谈向量检索 背景 索引一直被认为是检索引擎最重要的组成部分,之所以数据库能够快速的查询出来结果。系统设计中很多常见的多种数据结构都是为了快速命中索引设计的, 比如 红黑树、跳跃表、倒排索引、

qq_42828391的博客 6552

【乐鑫】唤醒词修改方法

乐鑫科技的语音识别模块(如ESP-SR)支持自定义唤醒词,但需通过官方工具链完成。

以实战经验介绍行业知识 826

C++ 判断一个 int 型整数是否为 2 的 N 次方(幂次)

判断一个整数是否为2的幂次方法有以下几种: 1.循环除2 这是最简单最好理解的方式。对于一个数如果是2的幂次,则其肯定可以被2一直整除直到其值为1。 所以可以通过一个while循环判断: void judge(int b) { while (!(b % 2)) { b = b / 2; if (b == 1) { printf("b 是 2 的幂次"); return; } } printf("b 不是 2 的幂次"); return; } while中是一个循环除2

YiYeZhiNian的博客 1万+

手把手教你学Simulink--四翼无人机滑模控制器设计与仿真

四翼无人机(Quadcopter)滑模控制(Sliding Mode Control, SMC)是一种鲁棒性很强的非线性控制方法,特别适用于存在模型不确定性和外部扰动的情况。滑模控制器通过强制系统状态进入并保持在一个预定义的滑模面上,从而实现对期望轨迹或姿态的精确跟踪。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个基于滑模控制策略的四翼无人机系统。

MHD0815的博客 184

C++的“位运算”魔术:判断一个数是否为2的幂

本文介绍了判断一个整数是否为2的幂的高效方法。首先通过循环除法实现基本判断,但效率较低。关键突破在于利用二进制特性:2的幂在二进制中只有1个"1"。通过位运算n & (n-1)可以快速判断,若结果为0则是2的幂。这种方法无需循环,仅需一次位运算和比较,效率极高。文章还提供了C++代码示例,并建议使用调试器观察二进制运算过程,帮助理解位运算原理。

weixin_42107409的博客 908

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

面试官:判断一个数是否为2的整数次幂

判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。第一种考虑(乘法)创建一个中间变量temp,初始值是1,然后进入一个循环,每次循环都让temp和目标值进行比较,如果相等,则说明目标是2的整数次幂,如果不相等,则让temp乘以2,继续循环比较,直到temp的值大于目标整数时,说明整数不是2的整数次幂。比如:181*2=2;2比...

weixin_40108469的博客 1523

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

vb怎么判断整数_判断一个数是否为2的整数次幂

判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。 第一种考虑(乘法)创建一个中间变量temp,初始值是1,然后进入一个循环,每次循环都让temp和目标值进行比较,如果相等,则说明目标是2的整数次幂,如果不相等,则让temp乘以2,继续循环比较,直到temp的值大于目标整数时,说明整数不是2的整数次幂。比如:181*2=2;2...

weixin_39639049的博客 861

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

判断一个整数是否是2整数次幂三种方法

#encode=utf-8 import time print u"写一个方法判断一个数是否能被2整除" def whole1(x): try: n=0 x=int(x) if x<2: print u"{0}不是2".format(x) while x>1: ...

baixie1994的博客 517

如何判断一个数是 2 的幂 / 3 的幂 / 4 的幂 / n 的幂 位运算 总结和思考 每日一题 C++的题解与思路

本文围绕“判断一个数是否为某数的幂”这一经典算法问题展开,以力扣231题(2的幂)为切入点,系统梳理了通用解法与特殊优化技巧。通用解法包括递归和迭代,核心是通过不断除以底数缩小问题规模,时间复杂度为O(logₓn)。针对2、3、4等特殊底数,重点解析了基于二进制特征的位运算优化(如2的幂可用n & (n-1) == 0判断,时间复杂度O(1))及数学特性应用。同时拓展了位运算的状态压缩、数学优化等延伸技巧,对比了不同解法的工程化选择,帮助读者从原理到实践全面掌握这类问题的解题思路。

Q741_147的博客 1433

判断正整数是否为2的某次幂,且是否为4的某次幂

题目:判断正整数是否为2的某次幂,且是否为4的某次幂 解题思路:先判断1,为2的0次幂 当不是1时,将该数不断除以2,当出现奇数时就退出,并给出否定(除了1以外),若一直到出现1都全是偶数的话,那么就是2的某次幂。具体几次幂可以在循环中加入变量累计。而2的偶数次幂就必定为4的某次幂,即当一个数为2的2k次幂时,也是4的k次幂,由此可同时判断是否为4的某次幂。 具体代码如下: import java...

建希的博客 263

bigdecimal判断是否为为null_判断一个数是否为2的整数次幂

判断一个正整数是否是2的整数幂(如4是2的2次方,返回true;5不是2的整数次幂,则返回false)。要求性能尽可能高。 第一种考虑(乘法)创建一个中间变量temp,初始值是1,然后进入一个循环,每次循环都让temp和目标值进行比较,如果相等,则说明目标是2的整数次幂,如果不相等,则让temp乘以2,继续循环比较,直到temp的值大于目标整数时,说明整数不是2的整数次幂。比如:181*2=2;2...

weixin_36410141的博客 1665

homework6:位运算符2 - 给定一个正整数,请定义一个函数判断它是否为2的幂

只要num大于1且能被2整除,就一直将它除以2,判断最终得到的结果是不是1,若是1,则num是2的幂。给定一个正整数,请定义一个函数判断它是否为2的幂(1, 2, 4, 8, 16, …使用一个变量x并将初始值设为1,只要x还小于目标整数,就一直左移它(左移1位乘以2)最终得到的x如果和目标整数相同,那么目标整数就是2的正整数幂。方法二:上述解法可以用位运算符优化一下,很显然一个正整数,如果它。利用这个性质,我们将该。

weixin_46222692的博客 501

LeetCode第231题_2的幂

LeetCode第231题要求判断一个整数是否是2的幂。2的幂在二进制表示中只有一个1,其余位为0。常见的解题方法包括循环迭代和位运算。循环迭代通过不断将n除以2,检查是否能整除,直到n变为1。位运算则利用n & (n-1) == 0或n & (-n) == n的特性,直接判断n是否只有一个1。代码实现中,需注意处理n为负数或零的情况。位运算方法的时间复杂度为O(1),是最优解。相关题目包括判断3的幂、4的幂等。

qq_40263592的博客 1032

算法题 2 的幂

摘要:LeetCode 231题要求判断整数n是否为2的幂。关键解法是利用位运算特性:2的幂在二进制中只有一个1,因此n & (n-1) == 0可高效判断(时间复杂度O(1))。其他方法包括循环除法(O(log n))、对数计算和内置函数等,但位运算是最优解。注意处理n≤0的情况。测试用例验证了算法的正确性,涵盖边界值和典型情况。该问题展示了位运算在数学问题中的巧妙应用。

红血哥 1001

php判断给定的整数是否是2的幂_leetcode No.326 3的幂

题目链接:3的幂 - 力扣(LeetCode)​leetcode-cn.com题目描述:给定一个整数,写一个函数来判断它是否是 3 的幂次方。示例 1:输入: 27 输出: true示例 2:输入: 0 输出: false示例 3:输入: 9 输出: true示例 4:输入: 45 输出: false进阶:你能不使用循环或者递归来完成本题吗?解题思路:刚刚的2的幂,是通过位运算的方式来解决的,现在...

weixin_39718890的博客 68

【力扣】2的幂,3的幂,4的幂

力扣的三道题,关于2的幂,3的幂,4的幂,每题分别用两种解法

mrqiuwen的博客 1418
上一篇: abcde五人打渔
下一篇: 实现最简单的正则表达式
CodeArhat
博客等级 码龄15年 13粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值