C语言之位运算符

一、原码反码补码的转换

①对于正数而言,它的原码=反码=补码
eg:
以8bit的数据存储为例讲解。

+10   原码:00001010反码:00001010补码:00001010
在内存中以补码存储

②对于负数而言
负数的反码:符号位不变,对原码其它位依次取反。0变1,1变0
负数的补码:符号位不变,反码+1
eg:

-10   原码:10001010反码:11110101补码:11110110
在内存中以补码存储

补码转换为原码

  • 方法1:原码=补码-1,然后符号位不变,按位取反
  • 方法2:对补码再求一次补码=原码(推荐)

二、位运算

1、位运算符

运符算格式功能结果
&表达式1&表达式2按位与1按位与1结果是1,1按位与0结果是0,0按位与0结果是0
|表达式1|表达式2按位或1按位或0结果是1,1按位或1结果是1,0按位或0结果是0
^表达式1^表达式2按位异或相同为0,不同为1
~表达式1~表达式2按位取反1变成0,0变成1
<<表达式<<左移位数左移无论是正数还是负数,左移都是对应的二进制位向左移动高位丢弃,低位补0左移的时候,等价于将这个数据乘以2
>>表达式>>右移位数右移右移,向右移动,低位丢弃,高位正数补0,负数补1

eg:-3左移3位

-3 的原码:1000 0011 补码:1111 1101
补码左移三位 : 1110 1000原码:1001 1000(二进制转十进制)-(8+16)=-24

-24右移6位

-24 的原码1001 1000补码:1110 1000
补码右移6位,高位补11111 1111原码:1000 0001十进制:-1
#include <stdio.h>
int main(){unsigned char reg = 3; char a = -3; reg = reg << 3; printf("reg = %d\n",reg);a = a << 3; printf("a = %d\n",a); a = a >> 6; printf("a = %d\n",a); return 0;
}
运算结果:
reg = 24
a = -24
a = -1

一个异或的技巧:
不借助第三方变量,交换a和b的值

#include <stdio.h>
int main(){ 
unsigned char a = 10,b = 15; 
unsigned char t = 0;printf("a = %d b = %d\n",a,b); a = a ^ b;b = a ^ b; //(a^b)^b=a  (b^b=0 0^a=a )a = a ^ b;printf("a = %d b = %d\n",a,b); return 0;}

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

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

相关文章

【STM32G431RBTx】备战蓝桥杯嵌入式→省赛试题→第十四届

文章目录 前言一、题目二、模块初始化三、代码实现interrupt.h:interrupt.c:main.h:main.c: 四、完成效果五、总结 前言 无 一、题目 二、模块初始化 1.LCD这里不用配置&#xff0c;直接使用提供的资源包就行 2.KEY, 四个按键IO口都要配置&#xff0c;分别是PB0, PB1,PB2,PA…

Unity单个物体绑定多个相机在轨道上移动,录制不同角度视频

环境搭建 下载Cinemachine插件安装 打开包管理器 下载cinemachine插件 创建轨道 使用dolly track 创建轨道 右侧可以删减关键点&#xff0c;注意调整y坐标 创建cart 把前面的轨道拖到path中&#xff0c;注意这里的speed要设定不为0才会动 设置VItual Camera 根据需…

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

【C 数据结构】双向链表

文章目录 【 1. 基本原理 】【 2. 双向链表的 创建 】实例 - 输出双向链表 【 3. 双向链表 添加节点 】【 4. 双向链表 删除节点 】【 5. 双向链表查找节点 】【 7. 双向链表更改节点 】【 8. 实例 - 双向链表的 增删查改 】 【 1. 基本原理 】 表中各节点中都只包含一个指针&…

【算法练习】30:快速排序学习笔记

一、快速排序的算法思想 原理&#xff1a;快速排序基于分治策略。它的基本思想是选择一个元素作为“基准”&#xff0c;将待排序序列划分为两个子序列&#xff0c;使得左边的子序列中的所有元素都小于基准&#xff0c;右边的子序列中的所有元素都大于基准。这个划分操作被称为分…

2024年 最火的Python学习路线

写在前面&#xff1a;Python是一种广泛使用的高级编程语言&#xff0c;以其简洁易读的代码和强大的库支持而受到开发者的青睐。作为一名刚开始学习Python的新手&#xff0c;或许您会对如何系统地学习这门语言感到困惑。接下来&#xff0c;我将为您提供一个详细的Python学习路线…

Elasticsearch部署安装

环境准备 Anolis OS 8 Firewall关闭状态&#xff0c;端口自行处理 Elasticsearch&#xff1a;7.16.1&#xff08;该版本需要jdk11&#xff09; JDK&#xff1a;11.0.19 JDK # 解压 tar -zxvf jdk-11.0.19_linux-x64_bin.tar.gz# 编辑/etc/profile vim /etc/profile# 加入如下…

Halcon颜色抽取-多产品颜色(MLP)

前言 //颜色抽取&#xff0c;单产品多区域 https://blog.csdn.net/m0_51559565/article/details/135216905由于在颜色抽取上面&#xff0c;我已经发了一篇博客了&#xff0c;是单产品多区域的情况。所以对于细分原理上就不过多的描述了。 本文主要是针对多产品多颜色的情况进行…

VSCode 作者插件大全

01. Chinese (Simplified) (简体中文) 02. C/C Themes 03. GitHub Copilot 04. GitHub Copilot Chat 05. Remote - SSH 06. Remote - SSH: Editing Configuration Files 07. Remote Explorer 08. VS Code Speech 09. vscode-icons 10. C/C 11. C/C Extension Pack 1…

代码随想录刷题随记19-二叉树8

代码随想录刷题随记19-二叉树8 235. 二叉搜索树的最近公共祖先 leetcode 因为是有序树&#xff0c;所以 如果 中间节点是 q 和 p 的公共祖先&#xff0c;那么 中节点的数组 一定是在 [p, q]区间的。即 中节点 > p && 中节点 < q 或者 中节点 > q &&…

中科软面试题

1、用户注册登录这一块用了哪些技术&#xff1f;数据库主要涉及那些表&#xff1f; 用了BCrypt加密算法&#xff0c;jwt生成token&#xff0c;网关实现全局过滤器校验token&#xff0c;还用了拦截器&#xff0c;获取在网关是指到请求头的userid存到threadlocal里面&#xff0c…

模型训练-保存训练数据

1.目的 找到一个可运行的代码&#xff0c;可以每个epoch打印训练数据&#xff0c;但是不会保存。因为在改进模型需要这些训练数据进行对比&#xff0c;所以需要将每个epoch的训练数据保存下来&#xff0c;写到一个文件中。 2.解决方案 直接问ChatGPT&#xff0c;提示词如下&…

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互&#xff0c;从而实现了Web请求的接收&#xff0c;处理和响应。 它的组件有如下几个&#xff1a; DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

0基础刷图论最短路 3(从ATcoder 0分到1800分)

AT最短路刷题3&#xff08;本文难度rated 1200~ 1400&#xff09; 题目来源&#xff1a;Atcoder 题目收集&#xff1a; https://atcoder-tags.herokuapp.com/tags/Graph/Shortest-Path &#xff08;里面按tag分类好了Atcoder的所有题目&#xff0c;类似cf&#xff09; &#x…

Ubuntu22.04安装ffmpeg(v7.0)

需下载文件&#xff1a;ffmpeg-7.0.tar.gz 安装步骤 1. 创建目录 mkdir -p /ffmpeg && cd ffmpeg2. 下载文件 wget https://ffmpeg.org/releases/ffmpeg-7.0.tar.gz3. 解压 tar -zxvf ffmpeg-7.0.tar.gz && cd ffmpeg-7.04. 安装环境依赖 官网说明&#…

练习题(2024/4/11)

1每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入…

Leetcode刷题之消失的数字(C语言版)

Leetcode刷题之消失的数字&#xff08;C语言版&#xff09; 一、题目描述二、题目解析 一、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 注意&#xff1a;本题相对书上原题稍作…

STM32 文档整理

//***********************************************************************************************************// 英文缩写名称NVIC嵌套向量中断控制器SysTick系统滴答定时器RCC复位和时钟控制GPIO通用IO口AFIO复用IO口EXTI外部中断TIM定时器ADC模数转换器DMA直接内存访…

Java中实现监听UDP协议的指定端口并收到数据按照十六进制输出

场景 对接协议中需要监听UDP协议的指定端口并监听数据&#xff0c;且数据格式为十六进制。 如果是在linux服务上&#xff0c;可以快速通过C或者python脚本等方式实现。 这里使用Java代码实现&#xff0c;可便于后续做其他存储数据等的扩展&#xff0c;且只需要在服务器上安装…

华为OD七日集训第6期 - 按算法分类,由易到难,循序渐进,玩转OD

目录 一、适合人群二、本期训练时间三、如何参加四、七日集训第 6 期五、精心挑选21道高频经典题目&#xff0c;作为入门。第1天、逻辑分析第2天、双指针第3天、滑动窗口第4天、二叉树第5天、矩阵第6天、分治递归第7天、深度优先搜索 大家好&#xff0c;我是哪吒。 最近一直在…