`

巧用位操作进行整除(高效计算)

 
阅读更多

最近连续看到两个利用位操作进行整除的代码,感觉特别好,做个笔记。

第一个:某个数除以8(整形数据的整除)。

int a = 9;

int b = a >> 3 << 3; // int b = a / 9;

第二个:

#define _INTSIZEOF(n)   ( (sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1) )

注释:先加上int变量大小少1,再将后面的某几位置零。

要理解这个困难点,不过就int变量在32、64位操作系统里都是4字节来看:sizeof(int)-1就是3,二进制:011,取反1...100,所以相当于整除以4。那么这个宏定义就是:变量n无论多少个字节,加上3,再整除4就是n占用内存大小,注意是占用。

 

根据第二个,联想到小数点四舍五入算法:

保留小数点后2位(四舍五入):float b = ((int)((a * 100) + 0.5)) / 100.0

以前我在excel里常用。

分享到:
评论

相关推荐

    可被 5 整除的二进制前缀(位运算)1

    通过这种方法,我们可以高效地解决这个问题,对于每个二进制前缀,我们只需要一次模 5 运算即可确定是否可以被 5 整除,而不需要将整个二进制数转换为十进制再进行除法操作,这样大大提高了计算效率。这个问题展示了...

    matlab基本操作和数学运算方法

    通过本次实验,不仅掌握了MATLAB的基本操作方法,还学会了如何使用MATLAB进行数学运算。这些技能对于后续更高级的应用非常重要,能够帮助我们更好地解决实际问题。此外,MATLAB的强大功能使其成为科研、工程和教学等...

    算法-判断能否被3,5,7整除(信息学奥赛一本通-T1047)(包含源程序).rar

    对于7,虽然没有简单的位运算技巧,但可以通过预计算7的倍数表,用查找表的方式来提高效率。 在信息学奥赛中,问题的解决方案往往需要兼顾时间和空间复杂度,因此在设计算法时,需要考虑如何在满足正确性的同时,尽...

    没事刷刷LetCode-整除幸运数.pdf

    整除幸运数是一种特殊的正整数,其定义是仅由数字4或7组成的数,例如7和47。本题目的任务是判断一个给定的正整数是否能被一个幸运数整除,并输出结果(YES或NO)。题目中提到了两种解决方法:暴力解法和幸运数遍历法...

    JAVA,10亿个数整除7个数,10亿次求余,编程语言性能测试

    6. **算法优化**:优化算法是提升性能的关键,比如使用位操作而非传统的除法和取余操作,可能会显著提高速度。 7. **硬件影响**:CPU架构、缓存大小、内存带宽等硬件因素也会影响性能表现。 在“2643不同编程语言-...

    计算机对口单招c语言程序整理.doc

    与上一个程序类似,但是这里使用了不同的格式化字符串来显示乘法表达式和结果,每行结束后也使用`printf("\n")`进行换行。 5. 求不同半径的圆柱体体积: 该程序用于计算半径1到10的圆柱体体积,并且只有当体积小于...

    南航计算机组成原理课件第4章

    - **逻辑(布尔)数据**:支持按位操作,用于逻辑判断和状态表示。 ### 寻址方式 - **立即寻址**:操作数直接包含在指令中。 - **寄存器寻址**:操作数位于寄存器中。 - **寄存器间接寻址**:寄存器中存放的是操作数...

    闰年的计算课程设计报告书

    设计二可能引入更复杂或优化的处理方式,例如使用位操作或者更高效的循环结构来提升计算效率。其流程图会展示更高级的控制流,而说明部分则会探讨这些改进如何提升程序性能和用户交互性。 2.3 设计比较: 这部分会...

    苏教版四年级下册数学简便计算题(李保中).doc

    这些题目主要涵盖的是小学四年级...通过这些方法,我们可以高效地解决这类简便计算题,帮助学生掌握基础的数学技巧,并培养他们的逻辑思维能力。在实际解题过程中,要灵活运用这些定律和技巧,使计算过程变得简单明了。

    全国计算机等级考试三级网络技术上机考试分类题型(新思路).pdf

    每道题都涉及到对四位数的各个位进行检查,然后用冒泡排序对符合条件的数进行排序。 在准备这类考试时,考生需要熟练掌握基本的编程概念,如循环、条件语句、数组操作、排序算法以及素数判断方法。同时,对于特定的...

    C语言计算机二级等考算法总结

    - **最大公约数、最小公倍数**:可以使用辗转相除法(欧几里得算法)来计算两个数的最大公约数,并进一步计算最小公倍数。 #### 4. 数位的分解、合成 这一部分涉及到将一个数分解为其各个位数,或者将几个位数合成...

    C++_C++INT函数进阶用法_

    下面我们将深入探讨`int`数据类型、位操作以及如何在C++中进行数值位交换。 1. **`int`数据类型**: 在C++中,`int`是一种基本的数据类型,用于存储整数,包括负数、零和正数。它的大小依赖于编译器和目标平台,但...

    events_fifo.rar_Unsigned

    在`events_fifo.c`这个源文件中,我们可以预期看到如何使用这些位操作函数来处理事件队列或类似的同步结构。这个文件很可能包含了如何创建和管理事件FIFO(先进先出队列)的代码,其中`sync_set_bit()`可能被用来...

    基4fft原理及matlab实现.pdf

    MATLAB代码中的关键部分包括计算旋转因子`Wn=exp(-2j*pi/N)`,定义中间临时数组`temp`,以及利用位操作进行4进制倒序的`n`变量的处理。在循环中,通过`temp`数组存储计算结果,并在每次循环结束后更新DFT结果`x`。 ...

    简单的除法运算,可以算1000位的小数

    标题提到的"简单的除法运算,可以算1000位的小数"可能涉及到了自定义数据结构和算法来存储和操作大数。 1. **大数表示**:为了存储1000位或更多的小数,我们需要用数组或者链表来存储每一位。例如,可以使用一个`...

    CRC计算方法与C实现

    CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛应用的错误检测技术,尤其在数据...在C语言中实现CRC算法,需要理解和掌握位操作、多项式表示以及高效的除法算法,以便在实际项目中高效、准确地检测数据错误。

    acm计算几何与数论

    - 进制位的操作可以帮助解决一些位操作问题,如异或、按位或等逻辑运算。 **3. 同余模运算** - **同余**:若a和b对模m同余,则表示a-b能被m整除。 - 模运算在ACM竞赛中极为重要,尤其是在处理大数问题时,如求幂...

    三级数据库计算机上级试题

    在每次循环中,先计算`data`的一半,然后使用一个嵌套的`for`循环来检查`data`是否能被小于它一半的任何数整除。如果不能,则认为`data`是质数,并将其添加到数组`xx[]`中。此外,还需要更新计数器`n`,当找到的质数...

    全国计算机三级上机(南开100题)

    - 主函数`main()`负责接收用户输入的`m`和`k`值,并调用`num`函数进行计算。 - 函数`readwriteDAT()`负责将计算结果输出到文件`out.dat`中。 **示例代码分析** 示例代码给出了三种不同的实现方法,其中第一种...

Global site tag (gtag.js) - Google Analytics