klib库下的kroundup32(二进制的四舍五入)算法
出自开源库klib(一个c语言的标准库)中。github地址。
一. 函数解释
对于32位的机器的二进制数字进行向上的四舍五入
例如 7(111)->8(1000), 12(1100)->(10000)
#include <stdio.h>
#include <stdint.h>
#ifndef kroundup32
#define kroundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))
#endifint main(int argc, char const *argv[])
{int x=7; kroundup32(a);printf("%d\n",x); // 显示8(1000)return 0;
}
二. 解释说明
1. 举例 00000000000000000101001011011011
2. 步骤1 --x
数字减一,避免进一步的四舍五入。例如 100不向1000进行四舍五入的进位,10000不向100000进行四舍五入的进位。
3. 步骤2 通过右移和"|"运算, 分别把一"补"入到每一个位置,直到每一个位置都是"1"为止
1. 右移1位 -> 保障前2个位置都变成1
00000000000000000101001011011010
|0000000000000000010100101101100
---------------------------------
00000000000000000111001011011010
2. 因为为上一次的"|"运算,使得前2位都是"1"所以这次右移2位 -> 保障前4个位置都变成1
00000000000000000111001011011010
|000000000000000001110010110110
---------------------------------
00000000000000000111111011111111
3. 同上 因为为上一次的"|"运算,使得前4位都是"1"所以这次右移4位 -> 保障前8个位置都变成1
00000000000000000111111011111111
|0000000000000000011111101111
---------------------------------
00000000000000000111111111111111
4. 同上 因为为上一次的"|"运算,使得前8位都是"1"右移8位 -> 保障前16个位置都变成1
00000000000000000111111111111111
|000000000000000001111111
---------------------------------
00000000000000000111111111111111
5. 同上 因为为上一次的"|"运算,使得前16位都是"1" 右移16位 -> 保障前32个位置都变成1
00000000000000000111111111111111
|0000000000000000
---------------------------------
00000000000000000111111111111111
4. 步骤3 ++x
以为上一步中将这个数字的所有为止都变成了1,所以"+1"后就完成了进位的工作
klib库下的kroundup32(二进制的四舍五入)算法相关推荐
- 「bitset」库下的便捷二进制转换
基本含义 int n;// 将要转换为二进制的数 string temp;// 承载二进制数据的字符串 bitset<8> bit;// 将要转换的数据给bit赋值,数字n将会被自动转换为 ...
- 社区生态 | openEuler、龙蜥Anolis、统信UOS三大主流操作系统下编译GreatSQL二进制包
为了更好地支持更多操作系统及相关生态,GreatSQL社区决定发布openEuler.龙蜥Anolis.统信UOS三个操作系统下的GreatSQL二进制包.相应的二进制包可以访问gitee.com上的 ...
- hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...
自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...
- mysql5.7 mysql库下面的user表没有password字段无法修改密码
如题所述,mysql5.7 mysql库下面的user表没有password字段无法修改密码, 5.7版本已经不再使用password来作为密码的字段了 而改成了authentication_st ...
- 【爬虫剑谱】三卷4章 拾遗篇-关于lxml库下etree模块中Xpath表达式的使用小结
关于lxml库下etree模块中Xpath表达式在实战后的快速上手小结 一.Xpath表达式 1. 将 etree 对象实例化的两种方法 (1)etree.parse() 转本地HTML文档 (2)e ...
- STM32F103VE基于标准库下DHT11数据串口打印输出
STM32F103VE基于标准库下DHT11数据串口打印输出
- mysql 获取一个库下的所有表名
http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html 官网上的第一个例子: mysql> SELECT table_nam ...
- 清空MySQL单库下所有表数据 || 删除MySQL单库下所有表
一.清空MySQL单库下所有表数据 -- 清空MySQL单库下所有表数据 SELECT CONCAT('truncate table ',TABLE_NAME,';') AS PLEASE_EXEC_ ...
- Altium Designer操作——创建元器件——同一SchLib库下创建多个器件模型
Altium Designer操作--创建元器件--同一SchLib库下创建多个器件模型 Altium Designer的使用者,无论是老手还是新手,基本都离不开自己动手画元器件的原理图以及PCB封装 ...
最新文章
- 第28讲 | 弄懂数字货币交易平台(二)
- 机器学习中为啥要有验证集?只要训练集和测试集不就可以了吗?
- 工作总结13:vue官网封装组件
- jeecms附件标签用法
- 投稿过程要不要考虑预印本?——medRxiv那些事
- 2001~2020大数据行业怎么样?面临哪些挑战?解决了什么问题?
- 汇编语言mul指令_跟着开源软件学汇编语言:计算器
- 【iOS开发必备指南合集二】申请IDP/真机调试/GameCenter 指南/OpenFeint指南
- top命令详解(转载)
- mac 生成公私钥key
- HTML5页面增强元素
- jquery fadein css同时用,Fadein,fadeout事件一起使用jquery
- Web用户控件开发--分页控件
- 清华镜像源地址(国内下载python包必备地址)
- SpringCloud(13)之微服务的现状和未来
- python中x%y是什么意思_python是什么
- 批量创建对象的四种模式
- 测试点击屏幕次数的软件_测试大佬分享:WEB和APP测试小结
- Zabbix icmp pinger processes more than 75% busy
- 重庆大学计算机学院刘然,重庆大学考研研究生导师简介-刘然
热门文章
- python多线程爬虫实例-Python3多线程爬虫实例讲解代码
- Opengl-实例化(不知道为啥叫实例化,感觉应该叫一次批量渲染)
- LeetCode Count and Say
- Spark- 使用第三方依赖解析IP地址
- Laravel 任务调度(Console)
- tensorflow 对csv数据进行批量获取
- 为什么写博客?如何在博客中更好的分享?
- 【Java面试题】13 Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?...
- docker命令行解析以及如何向服务器端发送请求(docker源码学习一)
- iOS完全自学手册——[三]Objective-C语言速成,利用Objective-C创建自己的对象...