位运算----奇思妙想(一)

算法 - 位运算 目录位运算基础位运算符概览基础应用实战演练只出现一次的数字 III比特位计数N皇后参考 位运算基础 位运算符概览 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ~ 非 ~1 = 0 , ~0 = 1 ^ 异或 两个位相同为0,相异为1 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0;有符号数,各编译器处理方法不一样,有的补符号位 阅读详情

    关于二进制位运算的原理性介绍,很多入门级的c语言书籍或者博客上都已经介绍得非常详细。本文不打算从入门原理重走老路,准备从应用角度出发,持续性介绍关于二进制位运算在实际应用中的巧妙性,给自己的学习作一个记录,同时也分享给爱好编程的朋友,一起交流分享。本文将主要介绍关于二进制位运算在图像处理算法等基础算法方面的巧妙应用,希望同样有巧妙应用的你,将你的奇思妙想留言到本文结尾,当然更希望能直接的与你一起探讨、学习,有好的东西分享或者疑问,请mail我:cimage1987@163.com


   (一)位运算在数字图像处理中的奇思妙想之快速计算最小最大灰度级

从原理上说,一幅灰度图像的理论像素值分布可能取值范围是[0, 255],共256个灰度级,但是在实际图像中,并不一定占据整个256个灰度级,有可能灰度分布在[50, 200]之间等等。由于后续算法处理的需求,我们需要提前统计计算图像的实际灰度级分布范围,也可能由于直方图均衡化的需要,提前计算图像的最小、最大灰度级。因此,我们可能会写下如下的代码(结合OpenCV):


void LocalMaxMinPixel(cv::Mat _img, int *MinValue, int *MaxValue)
{
	int wIndex = 0, hIndex = 0, position = 0;

	unsigned char min = 255, max = 0, tempValue = 0;

	int width = _img.cols, height = _img.rows;

	for( hIndex = 0; hIndex < height; hIndex++)
	{
		for( wIndex = 0; wIndex < width; wIndex++, position++)
		{
			tempValue = _img.data[position];

			if(tempValue < min)
				min = tempValue;//最小灰度级

			if (tempValue > max)
				max = tempValue;//最大灰度级
		}
	}

	*MinValue = min;
	*MaxValue = max;
}

    从上述代码中,可以很直观的发现,对整个图像遍历,每次都需要进行2次判断,或许还要进行2次赋值操作。那么,如果运用位运算替代,这里可以很巧妙的替换掉两次判定操作,仅进行两次位运算处理,具体代码如下:

void LocalMaxMinPixel(cv::Mat _img, int *MinValue, int *MaxValue)
{
	int wIndex = 0, hIndex = 0, position = 0;

	unsigned char min = 255, max = 0;

	int width = _img.cols, height = _img.rows;

	for( hIndex = 0; hIndex < height; hIndex++)
	{
		for( wIndex = 0; wIndex < width; wIndex++, position++)
		{
			min &= _img.data[position];//最小灰度级

			max |= _img.data[position];//最大灰度级
		}
	}

	*MinValue = min;
	*MaxValue = max;
}


PB位操作函数 PB位操作函数 内含源代码 支持接口开发 立即下载

相关推荐

手把手教你用certificate-manager修复Vcenter证书过期问题(附密码重置技巧)

本文详细解析了Vcenter证书过期引发的503服务不可用、密码错误等典型故障现象,并提供了使用certificate-manager工具进行系统性修复的完整步骤。文章重点阐述了证书体系原理、精准诊断方法,并分享了在SSO验证失败时通过vdcadmintool重置密码的关键技巧,帮助管理员快速恢复平台并建立预防性运维策略。

swift5iosmith的博客 457

如何在PB中进行位操作以及二进制与十进制转换(摘录)

原文:PFC 本文拟结合PFC中所提供的pfc_n_cst_numerical对象,讲解如何在PB脚本中实现位操作以及二进制与十进制相互转换。 (一)编写十进制转换成二进制的函数:public function string of_binary (long al_decimal);integer  li_remainderstring  ls_binary=If I

欢迎来到 Balloonman2002 之家,:) 4441

ComfyUI面部修复FaceDetailer保姆级教程:从模型选择到参数调优全解析

本文提供ComfyUI面部修复FaceDetailer的保姆级教程,深度解析从模型选择到参数调优的全过程。针对常见的五官模糊、肤色不均等问题,详细对比了BBox与Segm检测器的优劣,并给出SD1.5与SDXL模型的核心参数联动策略与实战方案,帮助用户精准掌控AI绘画中的面部修复效果。

weixin_29073241的博客 471

PB中位操作的实现代码

(三)编写公用函数以逐位获取BIT位数据: public function boolean of_getbit (long al_decimal, unsignedinteger ai_bit);Boolean...

cn889002的博客 378

Win本地部署DeepSeek

Ollama 提供了简单的接口,用于创建、运行和管理这些模型,同时还维护了一个丰富的预构建模型库,可以轻松集成到各种应用程序中。重启ollama,具体操作为打开搜索ollama进程,将其结束进程,之后再执行相关模型下载命令即可,或重启电脑!Ollama支持多种DeepSeek模型版本,用户可以根据硬件配置选择合适的模型。配置添加系统环境变量OLLAMA_MODELS,设置其值为新的路径,点击确定应用。安装完成后,在终端输入以下命令,检查Ollama版本。:14B、32B或70B版本,适合高端GPU。

m0_67297673的博客 2388

附录B:Standard Delay Format(SDF)(上)

本附录将介绍标准延迟标注格式,并说明了如何在仿真中执行反标。 延迟格式描述了设计网表的单元延迟和互连走线延迟,无论设计是用两种主要硬件描述语言(VHDL或Verilog HDL)中的哪一种所描述的。 本章还会介绍仿真的反标(backannotation),STA的反标其实是一个简单直接的过程,其中DUA中的时序弧将由SDF所指定的延迟进行标注。

To the beyond and infinity! 5410

位运算符及位字段

1.位运算符 按位取反~ 将所有二进制位按位取反 例如:0000 0000 0000 1101 按位取反:1111 1111 1111 0010 2.按位与& 两个数的二进制位都为1,则相与后为1,否则为0 (1111 0000 1111 0000) & (0101 1010 0101 1101) 结果:0101 0000 0101 0000 3.按位或| 两个数二进制位有一个为1,则为1,否则为0 (0101 1010 0101 1010) | (1010 0101 1010 0101)

qq_55047476的博客 609

四阶龙格库塔法求解一次常微分方程组(python实现)

之前在博客发布了关于使用四阶龙格库塔方法求解一次常微分方程组的文章,由于代码缺少具体的验证,部分朋友可能存在疑问,因此这里打算再重新写一篇博客来验证一下程序的正确性,另外,这里是使用python语言来实现的。

HelloWorldTM的博客 8543

MD5算法在PB中的实现

MD5算法自从1991开发出来以后广泛用于数字签名和加密解密领域。目前使用PB外的语言可以较为简单地实现了MD5加密,使用PB来实现的比较鲜见,这可能有如下两方面的原因:一,PB在位运算方面未提供直接使用的函数,要实现位运算比较麻烦;二,在PB(PB10之前的版本)中无法直接获取字符的unicode值。如果能够攻破这两个难点,在熟悉MD5算法之后应该比较容易地在PB中实现MD5加密。   PB虽然

lzp_lrp的专栏 5259

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

三菱FX5U系列PLC与汇川IT6000系列触摸屏进行MODBUS TCP通信的具体方法

Robot_PLC_HMI_Automation 6514

OpenStack [ compute_id ] 设计上的小缺陷

而 nova 代码中硬编码(或默认配置)将 compute_id 放在 site-packages 目录,属于 设计上的小缺陷—— 把 “库安装目录” 和 “运行时数据目录” 混在一起了,才导致需要临时调整这个目录的权限。# 配置项说明:node_identity_file 是 nova 用于指定节点标识文件路径的官方配置项,优先级高于代码中的默认路径。自定义 compute_id 路径,指向 /var/lib/nova/ 目录下的 compute_id 文件;

求知若渴,虚心若愚。 491

奇思妙想位运算

本篇旨在记录”奇思妙想”的位运算。 1的个数int c = 10; int count = (c == 0 ? 0 : 1) ;while( c = c&(c-1) ){ count++; }解析 c-1 会导致c最末尾的1 因为借位变为0,而此前最末尾的1后面必然全是0(或者1为个位),所以当c&(c-1)时,就相当于消去c中最末尾的一个1。 如6的二进制是0110,6-1的二进制是01

一只程序猿 1747

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

奇思妙想 “位运算“

奇思妙想 "位运算" 目录不用加减乘除做加法查找输入整数二进制中1的个数 不用加减乘除做加法 题目链接 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 数据范围:两个数都满足 0≤n≤1000 进阶:空间复杂度 O(1),时间复杂度 O(1) class Solution { public: int Add(int num1,int num2) { while( num2 != 0 ){ int sum = num1 ^ num2; //得到相加后不

qq_49613557的博客 718

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

位运算的奇思妙想

真正的装逼都是不经意间的,比如说,当你的代码中出现了位运算 位运算在算法当中的使用 Part 1 检验一个数是否为2的幂次,(当一个数的二进制中只有一个1时,就是2的幂次) 假设现在有一个整数为n,想要判断它是否为2的幂次,我们可以 // 判断是2的幂次 func isPowerOfTwo(n int){ if n & (n - 1) == 0 { fmt.Printf("%d是二的幂次\n", n) }else { fmt.Printf("%d不是二的幂次\n", n) } }.

weixin_44880685的博客 194

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

位运算技巧(判断两个数字是否异号)【奇思妙想、位运算】

通过这篇博客,我们不仅了解了如何巧妙地判断两个数字是否异号,还学习了其他常见的位运算技巧及其应用场景。位运算具有高效、简洁的特点,在编程中具有重要的实用价值。希望这些内容能帮助大家更好地理解和应用位运算技巧,提高编程能力。

qq_22841387的博客 1348

【位运算】进制数转换、奇思妙想

理论 二进制数字中某位的权重:2N−12^{N - 1 }2N−1 次方,N 为该位所在的位数。 二进制转十进制:数字中所有位 × 本位的权重然后求和。 实践 用轮子 好了看了那么多理论,是需要实践来巩固一下得了: public class 十进制与各进制的相互转换 { public static void main(String[] args){ int decimal = 10...

无敌兔0x01 652

玩转位运算的N条实践小技巧

对于位运算我们应该不陌生(当然,如果你还很陌生,你可以看我之前写过的关于位运算的文章,挺详细的),这一篇主要是针对平时我们日常生活中,碰到的关于位运算的一些问题,而总结出来的一些实践技巧,能够帮助我们快速解决一下相关问题,有助于玩转位运算的操作。本文会不断更新,日后碰到很多奇思妙想会继续更新进来,也欢迎大家留言更新。

BoCong-Deng的博客 753

位运算的奇思妙想之i&(-i)

位运算的奇思妙想之i&(-i)

queuelovestack的专栏 3967

(原)剑指offer之位运算

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路: count为1的位数,初始为零 每次右移一为,与1做与运算,结果不为零说明最后一位为1 c++代码如下 int numberofone(int n){ while (n){ if (n & 1) count++; n>>1 ...

weixin_30725467的博客 83

从CSAPP的DataLab实验,聊聊那些让你“拍大腿”的位运算骚操作

本文深入解析CSAPP的DataLab实验中的位运算技巧,包括德摩根定律的应用、逻辑右移的实现、分治算法统计1的个数等。通过具体代码示例和详细解释,揭示位运算的精妙之处,帮助读者理解计算机底层运作原理,提升编程思维和效率。

weixin_28717467的博客 329

JS交换变量常用的方法

JS不能像Python那样直接交换 num1, num2 = num2, num1 下面介绍几种常用方法 临时变量 万能方法,缺点是引入了新的变量。 let temp = num1; num1 = num2; num2 = temp; 先加后减 无需引入第三个变量,但是如果有浮点数可能会损失精度。 num1 = num1 + num2; num2 = num1 - num2; num1 = num1 - num2; 先乘后除 原理类似,但是交换值不能有0,否则导致分母为零返回NaN。 num1 = n

weixin_43487782的博客 274

python学习小记与问题记录(一)

python学习小记与问题记录 本人第一次学习python,之前学习c语言的过程中遇到了很多问题和需要注意的地方。因为大家也可能会碰到同样的问题 ,我就把我遇到的问题整理一下,可以供大家参考~~(白嫖)~~ 说在前面,要是想节省时间直接看结论的话,结论我会斜体加粗。 零、学习环境的准备 学习python,首先就是要准备环境~~(比如在自习室或图书馆而不是床上)~~;网上有很多学习的视频与讲解的课程不一定真的去花钱学习。我是跟着mooc上的课程再配合我的奇思妙想学习的。我觉得对于初学者来说,官方的python

geek2077的博客 1080

祖传代码的魔法书:解密程序员传承的智慧与技艺

程序员眼中的“祖传代码”如同一本古老的魔法书,记录着前辈们的智慧和技艺。有的代码如家传宝贝,有的如祖传秘方,每一行都是传承的珍宝。本文将深入探讨祖传代码中的独特逻辑与算法,以及它们如何为现代开发提供启示与灵感。

geyulai的博客 472

找不同 | LeetCode刷题笔记

一、题目描述 找不同 给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 从简单题目开始刷,锻炼自己的思维能力,为面试准备~ 二、思路分析 看看题目的示例,我们来理一理这个思路~ 示例 1: 输入:s = "abcd", t = "abcde" 输出:"e" 解释:'e' 是那个被添加的字母。 示例2: 输入:s = "", t = "y" 输出:"y"

java_dazhuzhu的博客 226
上一篇: 征服C指针之数组和指针的微妙关系
下一篇: 数据结构之线性链表
WTK-CV
博客等级 码龄16年 48粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值