C语言_常见位操作

C语言_常见位操作

文章目录

  • C语言_常见位操作
  • 一、位操作函数
  • 二、代码示例


一、位操作函数

设置某位为1或者对某位清0、获取某位的值、对某位取反

/*对某位置1*/
unsigned Setbit(unsigned x,int n)
{return  x |= 1 << n;
}/*对某位清0*/
unsigned Resetbit(unsigned x,int n)
{return  x &= ~(1 << n);
}/*取某位的值*/
unsigned Getbit(unsigned x,int n)
{return  ((x) >> (n)&1))
}/*对某位取反*/
unsigned Invertbit(unsigned x,int n)
{return   ((x) ^= 1<<(n))
}

获取x从p位到n位的值

unsigned Getbits(unsigned x,int p,int n)
{return (x >> (p+1-n)) & ~(~0 << n);
}

设置x从p位到n位的值

unsigned Setbits(unsigned x,int p,int n,int y)
{return x & ~(~(~0 << n) << (p+1-n)) | (y & ~(~0 << n)) << (p+1-n);
}

对x从p位到n位的值进行取反

unsigned Invertbits(unsigned x,int p,int n)
{return x ^ (~(~0 << n)) << (p-n+1);
}

对x循环右移n位

unsigned Rightbits(unsigned x,int n)
{return (x >> n) | (x << (8*(sizeof(unsigned))-n));
}

二、代码示例

代码如下(示例):

#include<stdio.h>
#include<string.h>void print_binary(unsigned int num) {if (num > 1) {print_binary(num >> 1);}putchar((num & 1) ? '1' : '0');}/*对某位置1*/
unsigned Setbit(unsigned x,int n)
{return  x |= 1 << n;
}/*对某位清0*/
unsigned Resetbit(unsigned x,int n)
{return  x &= ~(1 << n);
}/*取某位的值*/
unsigned Getbit(unsigned x,int n)
{return  ((x) >> (n)&1);
}/*对某位取反*/
unsigned Invertbit(unsigned x,int n)
{return   ((x) ^= 1<<(n));
}unsigned Getbits(unsigned x,int p,int n)
{return (x >> (p+1-n)) & ~(~0 << n);
}unsigned Setbits(unsigned x,int p,int n,int y)
{return x & ~(~(~0 << n) << (p+1-n)) | (y & ~(~0 << n)) << (p+1-n);
}unsigned Invertbits(unsigned x,int p,int n)
{return x ^ (~(~0 << n)) << (p-n+1);
}unsigned Rightbits(unsigned x,int n)
{return (x >> n) | (x << (8*(sizeof(unsigned))-n));
}void main(int argc,char* argv[])
{int a= 178 ,b= 178 , c= 178 , d= 178 , e= 178 , f= 178 , g= 178 , h = 178;  int p = 5,n = 3;printf(" 178: \t\t\t");print_binary(a);printf("\t\n\n");printf(" Setbit(a,3): \t\t");print_binary(Setbit(a,3));printf("\t\n");printf(" Resetbit(b,4): \t");print_binary(Resetbit(b,4));printf("\t\n");printf(" Getbit(c,5):\t\t");print_binary(Getbit(c,5));printf("\t\n");printf(" Invertbit(d,2):\t");print_binary(Invertbit(d,2));printf("\t\n");printf(" Getbits(e,5,3):\t");print_binary(Getbits(e,5,3));printf("\t\n");printf(" Setbits(f,p,n,15):\t");print_binary(Setbits(f,p,n,15));printf("\t\n");printf(" Invertbits(g,5,3):\t");print_binary(Invertbits(g,5,3));printf("\t\n");printf(" Rightbits(h,5):\t");print_binary(Rightbits(h,5));printf("\t\n");}

结果:
178:        10110010
Setbit(a,3):     10111010
Resetbit(b,4):    10100010
Getbit(c,5):     1
Invertbit(d,2):    10110110
Getbits(e,5,3):   110
Setbits(f,p,n,15):  10111010
Invertbits(g,5,3):  10001010
Rightbits(h,5):   10010000000000000000000000000101


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/211434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要用向量检索

之前写过一篇文章&#xff0c;是我个人到目前阶段的认知&#xff0c;所做的判断。我个人是做万亿级数据的搜索优化工作的。一直在关注任何和搜索相关的内容。 下一代搜索引擎会什么&#xff1f;-CSDN博客 这篇文章再来讲讲为什么要使用向量搜索。 在阅读这篇文章之前呢&#xf…

【网络安全】网络设备可能面临哪些攻击?

网络设备通常是网络基础设施的核心&#xff0c;并控制着整个网络的通信和安全&#xff0c;同样面临着各种各样的攻击威胁。 对网络设备的攻击一旦成功&#xff0c;并进行暴力破坏&#xff0c;将会导致网络服务不可用&#xff0c;且可以对网络流量进行控制&#xff0c;利用被攻陷…

【JavaEE】线程池

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

springcloud分布式事务

文章目录 一.为什么引入分布式事务?二.理论基础1.CAP定理2.BASE理论 三.Seata1.微服务集成Seata2.XA模式(掌握)3.AT模式(重点)4.TCC模式(重点)5.Saga模式(了解) 四.四种模式对比五.Seata高可用 一.为什么引入分布式事务? 事务的ACID原则 在大型的微服务项目中,每一个微服务都…

案例课4——智齿客服

1.公司介绍 智齿科技&#xff0c;一体化客户联络中心解决方案提供商。提供基于「客户联络中心」场景的一体化解决方案&#xff0c;包括公域私域、营销服务、软件BPO的三维一体化。 智齿科技不断整合前沿的人工智能及大数据技术&#xff0c;已构建形成呼叫中心、机器人「在线语音…

Python中函数的递归调用

函数调用自己的编程方式被称为函数的递归调用。递归通常能够将一个大型的复杂问题的递归条件&#xff0c;一层一层的回溯到终止条件&#xff0c;然后再根据终止条件的运算结果&#xff0c;一层一层的递进运算到满足全部的递归条件。它能够使用少量程序描述出解题过程中的重复运…

主机访问Android模拟器网络服务方法

0x00 背景 因为公司的一个手机app的开发需求&#xff0c;要尝试链接手机开启的web服务。于是在Android Studio的Android模拟器上尝试连接&#xff0c;发现谷歌给模拟器做了网络限制&#xff0c;不能直接连接。当然这个限制似乎从很久以前就存在了。一直没有注意到。 0x01 And…

分销电商结算设计

概述 分销电商中涉及支付与结算&#xff1b;支付职责是收钱&#xff0c;结算则是出钱给各利益方&#xff1b; 结算核心围绕业务模式涉及哪些费用&#xff0c;以及这些费用什么时候通过什么出资渠道&#xff0c;由谁给到收方利益方&#xff1b; 结算要素组成费用项结算周期出…

区块链的可拓展性研究【03】扩容整理

为什么扩容&#xff1a;在layer1上&#xff0c;交易速度慢&#xff0c;燃料价格高 扩容的目的&#xff1a;在保证去中心化和安全性的前提下&#xff0c;提升交易速度&#xff0c;更快确定交易&#xff0c;提升交易吞吐量&#xff08;提升每秒交易量&#xff09; 目前方案有&…

详解进程管理(银行家算法、死锁详解)

处理机是计算机系统的核心资源。操作系统的功能之一就是处理机管理。随着计算机的迅速发展&#xff0c;处理机管理显得更为重要&#xff0c;这主要由于计算机的速度越来越快&#xff0c;处理机的充分利用有利于系统效率的大大提高&#xff1b;处理机管理是整个操作系统的重心所…

前后端联调神器《OpenAPI-Codegen》

在后端开发完接口之后&#xff0c;前端如果再去写一遍接口来联调的话&#xff0c;会很浪费时间&#xff0c;这个时候使用OpenAPI接口文档来生成Axios接口代码的话&#xff0c;会大大提高我们的开发效率。 Axios引入 Axios是一个基于Promise的HTTP客户端&#xff0c;用于浏览器…

Go压测工具

前言 在做Go的性能分析调研的时候也使用到了一些压测方面的工具&#xff0c;go本身也给我们提供了BenchMark性能测试用例&#xff0c;可以很好的去测试我们的单个程序性能&#xff0c;比如测试某个函数&#xff0c;另外还有第三方包go-wrk也可以帮助我们做http接口的性能压测&…

C# 任务并行类库Parallel调用示例

写在前面 Task Parallel Library 是微软.NET框架基础类库&#xff08;BCL&#xff09;中的一个&#xff0c;主要目的是为了简化并行编程&#xff0c;可以实现在不同的处理器上并行处理不同任务&#xff0c;以提升运行效率。Parallel常用的方法有For/ForEach/Invoke三个静态方法…

Element-UI定制化Tree 树形控件

1.复制 说明&#xff1a;复制Tree树形控件。 <script> export default {data() {return {data: [{label: 一级 1,children: [{label: 二级 1-1,children: [{label: 三级 1-1-1}]}]}, {label: 一级 2,children: [{label: 二级 2-1,children: [{label: 三级 2-1-1}]}, {l…

Linux:进程优先级与命令行参数

目录 1.进程优先级 1.1 基本概念 1.2 查看系统进程 1.3 修改进程优先级的命令 2.进程间切换 2.1 相关概念 2.2 Linux2.6内核进程调度队列&#xff08;了解即可&#xff09; 3.命令行参数 1.进程优先级 1.1 基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优…

【C++】在类外部定义成员函数时,不应该再次指定默认参数值

2023年12月10日&#xff0c;周日下午 错误的代码 #include<iostream>class A { public:void fun(int a10); };void A::fun(int a10) //<----在这里报错 {}int main() {} 正确的代码 代码目前有一个问题&#xff0c;主要是在类外部定义成员函数时&#xff0c;不应该…

解密QQ号——C语言

题目&#xff1a; 有一串已加密的数字“6 3 1 7 5 8 9 2 4”解密规则&#xff1a;首先将第1个数字删除&#xff0c;紧接着将第2个数字放到这串数字的末尾&#xff0c;再将第3个数字删除并将第4个数字放到这串数字的末尾&#xff0c;再将第5个数删除 代码实现&#xff1a; #inc…

利用Node.js和cpolar实现远程访问,无需公网IP和路由器设置的完美解决方案

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

ESP32网络编程-OTA方式升级固件(基于Web浏览器)

OTA方式升级固件(基于Web浏览器) 文章目录 OTA方式升级固件(基于Web浏览器)1、ESP32的OTA介绍2、OTA升级固件方式3、软件准备4、硬件准备5、代码实现6、一种优雅方式实现Web方式OTA升级6.1 基础OTA代码6.2 新固件库代码在前面的文章中,我们在Arduino IDE的网络端口中,实现…

LeetCode 77.组合

题目&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 方法&#xff1a;灵神-组合型回溯 剪枝 class Solution {private int k;private final List<Integer> path new ArrayList<>();…