获取某一个数的2进制位数以及bitmask
举例说明:比如32对应的2进制为2b'100000,对应的bitmask为2b'11111。
实现代码:
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
/* 获取某一个数有多少bit */
static uint8_t _soc_get_digital_bits(uint32_t num)
{
uint8_t count = 0;
if (num % 2 == 0)
num += 1;
while(num != 0) {
num /= 2;
count++;
}
return count;
}
/* 获取bit掩码 */
static uint8_t _soc_get_digital_bitmask(uint32_t num)
{
uint8_t bits = 0;
uint8_t bitmask = 1;
uint8_t i = 0;
bits = _soc_get_digital_bits(num);
for (i = 0; i < bits; i++)
bitmask *= 2;
bitmask--;
return bitmask;
}
int main()
{
uint32_t num = 0;
uint8_t bits = 0;
uint8_t bitmask = 0;
for (num = 0; num < 33; num++)
{
bits = 0;
bitmask = 0;
bits = _soc_get_digital_bits(num);
bitmask = _soc_get_digital_bitmask(num);
printf("%u bits = %u, bitmask = 0x%x\n", num, bits, bitmask);
}
return 0;
}
编译、运行测试:

获取某一个数的2进制位数以及bitmask的更多相关文章
- (找到最大的整数k使得n! % s^k ==0) (求n!在b进制下末尾0的个数) (区间满足个数)
题目:https://codeforces.com/contest/1114/problem/C 将b分解为若干素数乘积,记录每个素数含多少次方 b = p1^y1·p2^y2·...·pm^ym. ...
- LeetCode 405. Convert a Number to Hexadecimal (把一个数转化为16进制)
Given an integer, write an algorithm to convert it to hexadecimal. For negative integer, two’s compl ...
- - >code vs 1475 m进制转十进制
1475 m进制转十进制 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 将m进制数n转化成一个 ...
- 枚举 + 进制转换 --- hdu 4937 Lucky Number
Lucky Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- js用8421码实现10进制转2进制
今天早上突然心血来潮决定用 ''和js来撸一个进制转换.(纯属心血来潮,有兴趣的可以看看.) 我们知道,通过8421码.可以快速的得到一个10进制的2进制.如下图: 如上图所示:我们将10进制的 '1 ...
- wikioi 1475 m进制转十进制
/*===================================== 1475 m进制转十进制 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转 ...
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...
- <算法>进制转换超详细
16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...
- hdu 4937 base进制只含3456的base数
http://acm.hdu.edu.cn/showproblem.php?pid=4937 给定一个数n,若这个数在base进制下全由3,4,5,6组成的话,则称base为n的幸运进制,给定n,求有 ...
- PAT Radix[二分][进制转换][难]
1010 Radix (25)(25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 ...
随机推荐
- java调用QQ影音进行截图
import java.awt.Graphics2D; import java.awt.Image; import java.awt.Robot; import java.awt.Toolkit; i ...
- 嘉楠k210 kd233官方demo板gpio点灯实验
使用maixpy micropython开发 import utime from Maix import GPIO from board import board_info from fpioa_m ...
- win11右下角快捷面板打不开的处理方法
win11右下角快捷面板打不开的处理方法 在搜索中查询计算机管理(因为没有将此电脑放出来,所以就用搜索了) 然后找到服务,找到windows推送通知系统服务,右键属性,将自动改为禁用,然后停止此服务, ...
- (已解决)安装PyMySQL出现问题--'pip' 不是内部或外部命令,也不是可运行的程序 或批处理文件
问题描述: 输入cmd,进入命令窗口,输入pip install pymysql时候出现下面的问题: 然后进入python环境中去输入还是报错: 问题原因:环境变量配置出错,cmd下无法调用pip程序 ...
- 力扣13(java)-罗马数字转整数(简单)
题目: 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1 ...
- vue-cli快速搭建项目的几个文件(三)
==========有加载动画的app.vue=========== <template> <div id="app"> <keep-al ...
- 都2024年了,你还不知道git worktree么?
三年前 python 大佬吉多·范罗苏姆(为 Python 程序设计语言的最初设计者及主要架构师)才知道 git worktree ,我现在才知道,我觉得没啥丢人的. 应用场景 如果你正在 featu ...
- 题解:ssy的队列
题目链接 题目描述 SSY是班集体育委员,总喜欢把班级同学排成各种奇怪的队形,现在班级里有 \(N\) 个身高互不相同的同学,请你求出这 \(N\) 个人的所有排列中任意两个相邻同学的身高差均不为给定 ...
- DNS(2) -- bind服务介绍及配置文件语法格式
目录 1. bind服务 1.1 bind概述 1.2 bind程序包结构 1.3 bind配置文件详解 1.3.1 bind配置文件 1.3.1.1 bind主配置文件 1.3.1.2 bind区域 ...
- debug技巧之本地调试
大家好啊,我是summo,今天给大家分享一下我平时是怎么调试代码的,不是权威也不是教学,就是简单分享一下,如果大家还有更好的调试方式也可以多多交流哦. 如果看过我文章的同学应该知道我是一个Java开发 ...