移位操作,宏定义

51单片机9(使用左移实现流水灯编程) 那么零往左移是不是就是这样零左移,左移多少,左移i这个i是跟着我们的这个循环的一个次数来的,当i=0的时候,满足这个条件,那进入循环体,i是等于0,这个0是不是相当于我们的i口所有的都是0,因为它是8位,如果只写一个0,相当于8位都是0,那这是不符合我们的一个功能要求,我们只希望第一个P2.0为零,其他的为1。就是说我们每一次这个加了一次,又要跳到这个条件来对比,如果是满足它进行,就会进入到我们的for语句里面,执行它的循环体,这相当于我们要执行8次,每一次是只加1的i+1,那么就相当于循环8次了。 阅读详情

工作中遇到的问题总结:
如何获取一个整数的某个字节的值,或bit的值,请用宏定义的方式实现:
#define GET_BIG_BYTE(X) (((X)>>24)&0xFF) //取得最高的一个字节数值,前提X为一个4字节的数。
总结,如果想获得某个字节的值,可用将字节低bit位全部移除,再用1来与上你要保留的bit,其他bit位用0来与。相信这个大家应该都知道,很简单。
如何实现对uint型的整数的某个bit赋值呢?如何用宏定义实现呢?
假设要设置uint的高16bit的低8bit的值为某个某个字节Y
#define SET_BYTE(X, Y) (X) =(X)&(~(0xF<<16))|((Y)<<16)
总结,如果想赋值则必须是两个值,X表示被赋值的数,Y表示要赋值的一个字节(当然也可以是uint型等但需要保证其他位被&成0)。
其次就是保证(X)=最终的结果,否则运算就白做啦。
之后就是你要将你要设置的位清楚为0。(X)&(~(0xF<<16)),记住一定是先取反再移位。
最后就是将要赋值的数移动到指定的位置就好啦,千万要记住其他位要被与成0啊。

彩蛋再最后啊!!!
前边的都挺简单的,只是想总结一个通用的编写规则,记住后能够快速编码而已。
那么最后的问题来了,如果是一个32bit的值左移32bit会是一个什么结果呢?
比如 uint a = 0xFF;
uint b = 0x0;
b = b| (a<<32);
答案是不确定,不同的编译器处理不同,如果a超过了32bit可能出现循环移位的情况。
最终结果就是 b = 0xFF 。我当前测试的结果就是这个啦。
也有一些处理器会出现a的bit位移除了,变成0.
所以要求我们编程时,对于一个32bit的变量不能移动超过32bit,即如果要对一个long long型的数值进行按位操作时,所对应的移动的值也应该是longlong型的。
如下:
#define SET_BYTE(X, Y) (X) =(X)&(~(0xF<<32))|((Y)<<32)
此时X一定是大于32bit的,要求Y也要是一个大于32bit的值进行移位。
最后再啰嗦一句哈,如果 Y是一个ushort型的,移位超过16bit会自动扩展到32bit。
Linux驱动开发中常用的宏编程技巧 在Linux驱动开发过程中,宏编程是一项非常重要的技巧。通过使用宏,我们可以实现代码的重用、简化和优化。本文将介绍一些常见的宏编程技巧,并提供相应的源代码示例。以上是一些在Linux驱动开发中常用的宏编程技巧。通过合理运用这些宏,我们可以提高代码的可读性和可维护性,并加快开发速度。这个容器宏允许我们从结构体中的成员指针获取到整个结构体的指针。这些宏可以帮助我们在不同字节序之间进行转换,比如从大端字节序转换为小端字节序。在发布版本中,调试宏会被定义为空,从而禁用调试输出。在调试模式下,调试宏会使用。 阅读详情

相关推荐

OpenCV形状检测

开始定义我们的ShapeDetector类。我们将跳过这里的init构造函数,因为不需要初始化任何东西。#导入必要的包importcv2classShapeDetector#初始化形状名称并近似轮廓shape="unidentified"peri=cv2.arcLength(c,True)approx=cv2.approxPolyDP(c,0.04*peri,True)我们的检测方法,它只需要一个参数c,即我们试图识别的形状的轮廓。...

weixin_43229348的博客 9423

c语言 宏变量运算,【C语言】宏定义实现位运算

一、常用位操作符1.1 位与&真值表&10110000特点有0为0,全1为11.2 位或|真值表|10111010特点有1为1,全0为01.3 位异或^真值表^10101010特点相同为0,相异为11.4 位取反~位取反是将操作数的二进制为逐个按位取反,注意与逻辑取反区分1.5 左位移<>C语言的位移运算要取决于其数据类型无符号数左移时右侧补零,为逻辑位移右移时左侧补零...

weixin_29552815的博客 1280

Bellhop海底地形仿真入门:从MATLAB数据导入到3D可视化(附避坑指南)

本文详细介绍了Bellhop海底地形仿真的完整工作流程,从MATLAB数据导入、清洗与坐标转换,到构建.bty输入文件,再到生成高质量3D可视化结果。文章重点解析了数据格式、深度值正负、单位统一及坐标投影等关键环节的避坑指南,并提供了可复用的代码片段,帮助用户高效完成从原始数据到仿真成果的转换。

weixin_29275257的博客 194

C语言_用宏定义实现位运算

这两天学习了C的位运算,记录一下,这个知识也是看Linux内核的基础。 与或非 位与& 和 逻辑与&& 位与的真值表的特点是:只有1&1结果才1;1&0,0&1,0&0结果都为0. 位与操作与逻辑与操作一起记住,把非0的数看成是1,0做为0,然后再进行与&运算,例如0xffff&&0x11=1; 位或| 和 逻辑或|| 位或只有两个0位或结果为0,其余都是1,真值表:1|1=1,1|0=1,0|1=1,0|0=0 两个操作

weixin_43916755的博客 2333

SQL-拼多多 面试题:连续3次为球队得分的球员名单

1.使用LAG开窗函数 筛选出 下一次和下下一次得分,并用进球时间进行排序。2.使用where筛选出值得嘉奖的球员。

Ftr1998的博客 643

2024银行科技岗笔试通关秘籍:从资料准备到实战技巧

本文系统解析了2024年银行科技岗笔试的考察内容与备考策略。文章指出,笔试是一场涵盖通用能力测试、计算机专业基础、金融科技知识和英语性格测试的复合型考试,并重点提供了数据结构与算法、计算机网络、数据库等高频考点的深度解析与实战突破技巧,帮助考生高效准备,顺利通关。

weixin_29243279的博客 121

C语言位操作

C语言位操作1 位操作运算符 1.1、与 (&)、或(|)、按位取反(~) 1.2、移位操作:左移(<<)、右移(>>) 2 位操作宏函数 2.1 bit n位置位,即bit n 置1其他位保持不变(从bit 0开始,如 0x01 bit 0为1)#define SET_NTH_BIT(x,n) (x | (1U << n))其中,1U 表示无符号整数1,左移n为得到bit n位为1,即掩码

qq_21095607的博客 1019

使用Python的OpenCV库进行三维重建点云

通过这些步骤,我们可以使用Python的OpenCV库进行三维重建,并生成对应的点云。当然,这只是一个简单的示例,实际的三维重建可能涉及更多的图像处理和计算步骤。在计算机视觉领域,三维重建是一项重要的任务,它可以将多个二维图像或视频序列转换为三维场景模型。在本文中,我们将介绍如何使用Python的OpenCV库进行三维重建,并生成相应的点云。以上是使用Python的OpenCV库进行三维重建点云的简要介绍和示例代码。最后,我们可以将计算得到的三维点云可视化。安装完成后,我们可以开始编写代码。

AuSwift的博客 1646

采用宏定义常量的表示方式为_零基础学C语言(6):变量与常量

前面我们初步认识了数据类型、常量和变量,并讲完了基本数据类型,那接下来咱们详细介绍下变量和常量。常量之前我们介绍了什么是常量,就是在程序的运行中不可以改变的量。常量分为整型常量、浮点型常量、字符常量、字符串常量和符号常量。1.整型常量1.1十进制整数这个不难理解,就是我们常说的自然数。如:1.2 八进制整数八进制的数表示为前面带“0”的数。如1.3 十六进制数与八进制不同,十六进制整数以“0x”开...

weixin_39525300的博客 774

基于STM32+Qt上位机设计的智慧停车场管理系统(207)

本项目设计了一套基于STM32+Qt上位机的智慧停车场管理系统。该系统融合了先进的嵌入式技术、图像识别技术、数据库技术和移动互联网技术,通过STM32硬件端实时采集车库现场信息,包括车牌识别、车位占用状态监测等,并将数据上传至Qt上位机进行处理与展示。利用MySQL数据库存储车辆出入库记录及车位使用情况,确保数据的安全性和可追溯性;通过Android手机APP为用户提供查询、支付等功能,实现远程交互与便捷服务。

3942

JVM高频面试基本问题与知识点整理

JVM高频面试基本问题与知识点整理

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 87万+

KeilC 实现带Carry位的移位操作

//---------------------------------------- // KeilC 实现带Carry位的移位操作 (左移) //---------------------------------------- #define   _RLC_(Data)   CY = Data&0x80  // Data带进位左移1位,数据放入ACC //...

weixin_34381666的博客 1254

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

位的宏定义与位掩码

/currLevel:现在数据线上的电平用户给出的代码是:首先,我要理解这个宏的作用。看起来用户是想定义一个代表第9位的掩码。通常,这样的宏用于位操作,比如设置、清除或检查某个特定位的状态。接下来,我需要检查这个宏是否正确。首先,0x0200对应的十六进制值是多少呢?让我们计算一下。十六进制的每一位代表二进制(4*8=32),所以0x0200是二进制的0000 0010 0000 0000,也就是十进制的512。那么,这确实是第9位的位置,因为位计数通常从0开始。

zerofic的博客 989

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

32位BIT常数的宏定义 代码比移位操作更有可读性

#ifndef _CLOCK_H #define _CLOCK_H //bit 0 ~ 31 #define BIT_0 0x00000001 #define BIT_1 0x00000002 #define BIT_2 0x00000004 #define BIT_3 0x00000008 #define BIT_4 0x00000010 #define BIT_5 0x00

jiankangshiye 3149

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

c语言中的移位操作,c语言中的移位操作

C 语言中的移位操作 时间:2010-12-08 C 语言中的移位操作,内容不多。不过有些地方你不注意,就疏忽了。 先做两个小题先。 (1)unsigned char x=3; x1 是多少? (2)char x=3; x1 是多少? (3)char x=-3; x1 是多少? 3 写成二进制数是 00000011;-3 写成二进制数是( 补码)11111101。 程序执行的时候,操作的是数值的编...

weixin_33290540的博客 443

面试题----获取整数各个字节

为什么在联合体中 uint32_t data 数据可以通过联合体中的结构体byte一个一个取出来呢?因为联合体的特点就是它的成员共用一块内存空间,因此可以通过不同的成员来访问相同的内存地址。在这个联合体中,data 和 byte 是联合体的两个成员。data 是一个32位的无符号整数,byte 是一个嵌套结构体,包含了4个8位的无符号字符。当使用 num.data = 0x12345678;将一个32位的数据赋值给 data 成员时,联合体的内存空间会被相应的数据填充。

qq_38835449的博客 327

大小端转换

文章以32位整数为输入,采用两种方法进行大小端转换,一个是宏定义,一个是函数形式;#include "stdio.h" #define T(x) (((x&0xff)<<24)|((x&0xff00)<<8)|((x&0xff0000)>>8)|((x&0xff000000)>>24)) //1.四个字节的排放顺序要弄清楚```void transfer(int x) { c

5724

C:宏定义 zz

<br />使用宏时,用圆括号括住每个参数,并括住宏的整体定义;一般来说,在宏中不要使用自增或自减运算符。<br /><br /> <br />下面是一些常见的宏定义:<br /> <br />[1]最值<br /> #define MIN(x, y)   (((x) < (y)) ? (x) : (y))<br /> 求两者间的较小者<br /> #define MAX(x, y)   (((x) > (y)) ? (x) : (y))<br /> 求两者间的较大者<br /> #define

跌打滚爬中向前的专栏 831

Verilog全新语法认识--Xilinx language template

文章目录0.背景1、verilog语法篇1.1、common constructs1.2 、compiler directives(编译指令)defineincludetimescale1.3 operatorarithmetricbitwiselogicreplicate/concatenate 复制和连接shift移位操作 0.背景 本篇blog将围绕官方提供的verilog模板以及仿真模板,...

ciscomonkey的博客 3750

C语言中获取整数和浮点数的符号位

1. 为什么要获得符号位 很多时候,我们需要判断数值的正负,来做相应的逻辑处理。条件判断语句可以很好的完成这个需求。有时候会有下面的情况, if (x > 0) { x = x - 1; } else { x = 1 - x; } if (x < 0) { x = -x; } 正负只是数值的符号位变化,或是计算结果的符号位变化。但是我们需要用一个判断,首先

把理性与逻辑灌入电光石火奔腾流淌的指令集…… 9560

二进制数据-位操作-API

对数值位操作,使用“移位”操作,提高速度; 通过“宏”的形式来封装,避免函数调用,提供速度; //======================================================================== #include <stdio.h> //====================================== //获取 val 数...

LC的专栏 332

STM32学习 第一天

&&逻辑与 &按位与 ||逻辑或 |按位或 a&=b,就是将a与b做按位“与”运算,结果赋值给a,也就相当于a=a&b; a|=b就是将a,b 做按位”或“运算,结果给a,相当于a=a|b 应用:(1)不改变其他位的值的状况下,对某几个位进行设值。 GPIOA->ODR &=0XFF0F; //将第 4-7 位清 0 GPIOA->O...

weixin_44703569的博客 1061

对一个32位整型数进行逆序,如:0x11223344变为0x44332211

该宏定义可以对一个,32位整型数进行逆序。

weixin_44799641的博客 380

为什么我们需要带上类型后缀?U/UL/ULL/L/LL

编码中使用类型后缀可以帮助我们避免很多意想不到的问题,一起来看看吧~

深空深蓝的博客 8459
上一篇: RAS - Reliability, Availability and Serviceability
下一篇: 如何理解atoi、atol、strtol在32位系统64位系统上的区别
LY_ulysses
博客等级 码龄16年 12粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值