C for ios --- 位运算

iOS开发-位运算基础 前言 现代计算机只有0/1状态,计算机中所有的数据按照具体的编码格式以二进制的形式存储在设备中。 直接操作这些二进制数据的位数据就是位运算,位运算是一种极为高效乃至可以说最为高效的计算方式,虽然现代程序开发中编译器已经为我们做了大量的优化,但是理解并合理的使用位运算可以提高代码的可读性以及执行效率。 原码 原码规定数值最高位为符号位,正数符号位为0,负数符号位为1(0有两种表示:+0和-0),其余位表示数值的大小。 例如,11的原码为00001011,-11的原码就是10001011。 原码不能 阅读详情

位运算符介绍(一)


1.什么是位运算符?

  • 位运算是指按二进制进行的运算。在系统软件中,常常需要处理二进制位的问题。 C语言��供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的 char,short,int与long类型。

2.位运算符与

  • & 按位与

    • 只有对应的两个二进位均为1时,结果位才为1,否则为0
    • 口诀: 同1为1
  • 示例:

~~ 9&5 = 1
~~ 
~~  1001
~~ &0101
~~ ------
~~  0001
  • 规律

    • 二进制中,与1相&就保持原位,与0相&就为0
  • 应用场景:

    • 按位与运算通常用来对某些位清0或保留某些位。例如把a的高位都清0,保留低八位,那么就a&255
    • 判断奇偶: 将变量a与1做位与运算,若结果是1,则 a是奇数;若结果是0,则 a是偶数
    • 任何数和1进行&操作,得到这个数的最低位
~~   1001
~~ & 0001
~~ ------------
~~   0001
 ```
'' + 想把某一位置0

~~ 11111111
~~ & 11111011
~~ ————
~~ 11111011

---

## 3.位运算符或
- | 按位或
    + 只要对应的二个二进位有一个为1时,结果位就为1,否则为0

- 示例

 ```
~~ 9|5 = 13
~~ 
~~  1001
~~ |0101
~~ ------
~~  1101
 ```
---

## 4.位运算符异或
- ^ 按位异或
    + 当对应的二进位相异(不相同)时,结果为1,否则为0

- 示例

~~ 9^5 = 12
~~
~~ 1001
~~ ^0101
~~ ——
~~ 1100
“`

  • 规律
    • 相同整数相^的结果是0。比如5^5=0

* 任何数异或另一个数两次,还是原数本身

5.位运算符取反

  • \~ 取反

    • 各二进位进行取反(0变1,1变0)
    • 多个整数相^的结果跟顺序无关。比如5^6^7=5^7^6
    • 因此得出结论:a^b^a = b
  • 示例

~~ ~9 =-10
~~ 
~~ 9的原码:0000 0000 0000 0000 0000 1001
~~    反码:1111 1111 1111 1111 1111 0110
~~ 
~~ 知道补码求原码:也是符号位不变,其他各位取反+1
~~ 1111 1111 1111 1111 1111 0110
~~ 取反
~~ 1000 0000 0000 0000 0000 1001
~~ +1
~~ 1000 0000 0000 0000 0000 1010 // -10
~~ 

6.练习

  • 判断一个数的奇偶性,如果是奇数则打印“奇数”,否则打 印“偶数”
~~ int a = num&1;
~~ If(a){
~~     printf("奇数");
~~ }else{
~~     printf("偶数");
~~ }
 ```
- 面试题使用位运算实现交换两个数的值

 ```
    //
//  main.c
//  位运算符demo
//
//  Created by D9ingCompany on 2017/3/24.
//  Copyright © 2017年 D9ingCompany. All rights reserved.
//

/**
 swap ab value

 @param argc <#argc description#>
 @param argv <#argv description#>
 @return <#return value description#>
 */
#include <stdio.h>

void swapNormal(int,int);
void swapBigger(int,int);
void swapSupper(int,int);

int main(int argc, const char * argv[]) {
    int a = 5;
    int b = 10;
    printf("交换前a = %i,b = %i\n",a,b);
    swapSupper(a, b);
//    swapNormal(a, b);

//    swapBigger(a, b);
    return 0;
}

/**
 位运算交换

 @param a <#a description#>
 @param b <#b description#>
 */
void swapSupper(int a,int b ){
    a = a^b;
    b = a^b;
    a = a^b;
    printf("a = %i,b = %i\n",a,b);
}

/**
 运算交换

 @param a <#a description#>
 @param b <#b description#>
 */
void swapBigger(int a, int b )
{
    a = a+b;
    b = a-b;
    a = a-b;
    printf("a = %i,b = %i\n",a,b);
}

/**
 容器交换

 @param a <#a description#>
 @param b <#b description#>
 */
void swapNormal(int a,int b){

    int tmp = a;
    a = b;
    b = tmp;
    printf("a = %i,b = %i\n",a,b);

}

位运算符介绍(二)

1.左移位运算符

  • 把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方

    • 由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性
  • 示例

~~ 2<<1; //相当于 2 *= 2 // 4
~~ 2<<2; //相当于 2 *= 2^2; // 8
  • 应用场景
    • 快速计算一个数乘以2的n次方
    • 左移动就是乘以2的n次方

2.右移位运算符

  • 把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方

    • 为正数时, 符号位为0,最高位补0
    • 为负数时,符号位为1,最高位是补0或是补1
    • 取决于编译系统的规定
  • 示例

~~ 2>>1; //相当于 2 /= 2 // 1
~~ 4>>2; //相当于 4 /= 2^2 // 1
~~ 
  • 应用场景
    • 快速计算一个数除以2的n次方

+ 右移就是一个数除以2的n次方

负数的左移右移

  • 负数的左移右移是补码再移动,负数是以补码的形式存储在内存中

3.练习

  • 写一个函数把一个10进制数按照二进制格式输出
  • 分析
~~ 13 -----> 0000 0000 0000 0000 0000 0000 0000 1101
~~ 0000 0000 0000 0000 0000 0000 0000 1101 13
~~ 0000 0000 0000 0000 0000 0000 0000 0001 1
~~ 每次取 一个数的最后一个二进制位
~~ 任何一个数和1进行&(按位与)得到任何一个数的二进制的最后
~~ 一位
  • 实现
~~     int len = sizeof(int)*8;
~~     int temp;
~~     for (int i=0; i<len; i++) {
~~         temp = num; //每次都在原数的基础上进行移位运算
~~         temp = temp>>(31-i); //每次移动的位数
~~         int t = temp&1; //取出最后一位
~~         if(i!=0&&i%4==0)printf(" "); printf("%d",t);
~~     }

IOS9开发指南之Objective-C语句操作 5. switch ...case语句操作。7.while循环语句操作。3.获取控制台输入并判断。6. for循环语句操作。 阅读详情

相关推荐

Objective-C高级特性与位运算详解

本文深入探讨了Objective-C语言中的高级特性,如依赖属性的观察者模式、分类(Categories)以及如何通过类别向现有类添加方法。同时,文章还介绍了C语言的基础知识,包括位运算的概念、按位或操作及其在实际编程中的应用。通过具体的代码示例和实战演练,让读者对这些高级概念有了更深刻的理解。

weixin_29781865的博客 466

ios高效开发-正确的使用枚举(Enum)

前言 Enum,也就是枚举,从C语言开始就有了,C++、Java、Objective-C、Swift这些语言,当然都有对应的枚举类型,功能可能有多有少,但是最核心的还是一个—规范的定义代码中的状态、选项等“常量”。 Item 5 - Use Enumerations for States, Options, and Status Codes 本节的内容就是如何正确的使用枚举。

DaLei 4万+

掌握位运算:Objective-C中的位掩码应用

本文详细介绍了Objective-C中位运算的使用方法,特别是位掩码的应用。通过NSDataDetector类的实例讲解了如何使用按位或运算符来指定搜索类型,并通过按位与运算符来检查特定的设置。此外,文章还介绍了其他位运算符如异或、补集、左移、右移以及如何使用枚举类型定义位掩码。

weixin_42593130的博客 492

iOS:枚举和位运算

今天对iOS的枚举和位运算做一下整理,主要内容如下: 1.iOS中的两个枚举类型:NS_OPTIONS,NS_ENUM 2.枚举使用位运算的原因 3.位运算介绍和扩展 一.枚举类型 一般情况下,我们采用C风格的enum关键字可以定义枚举类型。 enum{ UIViewAnimationTransitionNone, UIViewAn

zhichayibu2012的专栏 4683

从Bit到MCS:深度解析Xilinx FPGA程序固化流程与文件选型

本文深度解析Xilinx FPGA程序从调试到量产的固化流程,重点对比BIT、BIN、MCS和ELF四种文件格式的特性与适用场景。针对工业级应用,详细讲解MCS文件的生成优化、Flash烧录避坑指南及三级验证流程,并分享多镜像管理、加密安全等高级技巧,帮助开发者提升FPGA量产可靠性。

weixin_30924239的博客 324

Tailscale 自建 DERP 中继服务器

Tailscale自建DERP中继服务器

Accompagner的博客 4328

基本的位运算

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。很多高级的动态规划题目或者一些基础的运算往往需要较高的执行效率和较低的空间需求,或者需要表示一些状态集合,而位运算刚好能满足这一切。很多的时候,恰当的位运算使用也能使程序变得更加简洁和优美。位运算应用口诀: 清零取反要用与,某位置一可用或 若要取反和交换,轻轻松松用异或 一:简介 1、位逻辑运算...

lybc2019的博客 755

开源生成式推荐框架MiniOneRec实践:从SID构建到RL微调全解析

在推荐系统领域,从协同过滤到深度学习,核心目标始终是精准预测用户兴趣。其技术原理经历了从矩阵分解到深度神经网络的演进,旨在从海量用户行为数据中挖掘复杂模式。随着大语言模型(LLM)的兴起,生成式推荐作为一种新兴范式,将推荐问题重构为序列生成任务,展现出更强的泛化能力和端到端优化潜力,尤其适合处理动态、多模态的推荐场景。本文聚焦于首个完全开源的生成式推荐框架MiniOneRec,它通过引入语义商品ID(SID)解决物品离散化难题,并采用监督微调(SFT)与强化学习(RL)结合的完整训练流程,为工程师和研究者提

weixin_42573647的博客 534

C语言内存分析

  C语言内存分析 一、进制 概念:进制是一种计数方式,是数值的表现形式 4种主要的进制: ①. 十进制:0~9  ②. 二进制:0和1 ③. 八进制:0~7 ④. 十六进制:0~9+a b c d e f C语言在默认的情况下为十进制。 Int num=1010;//十进制 Int num=0b1100;//二进制,以0b或者是0B开头 Int num=014;//八进制...

weixin_33845881的博客 244

机器学习参数寻优:方法、实例与分析

机器学习模型的性能很大程度上依赖于其参数的选择。参数寻优(Hyperparameter Tuning)是提升模型表现的关键步骤之一。本文将详细介绍主流的参数寻优方法,包括网格搜索(Grid Search)、随机搜索(Random Search)、贝叶斯优化(Bayesian Optimization)、和超参数优化库(如Optuna和Hyperopt)等,并探讨它们的优缺点及适用场景。

甜盐的博客 2840

撸毛笔记-电信营业厅 v5.03

电信营业厅 v5.03签到和完成部分金豆任务, 喂宠物7天,15天,28天连签抽奖, 宠物等级权益兑换自己设置电信的服务密码, 把 手机号#服务密码 填到变量里:每天运行一两次const $ = new Env("电信营业厅");

xiaoshun007的专栏 4494

iOS_06_基本运算符

一、算术运算   c语言一共有34种运算符,包括了常见的加减乘除   1.加法运算+     # 除了能做加法运算,还能表示正号:+5、+90   2.减法运算-     # 除了能做减法运算,还能表示符号:-10、-200   3.乘法运算*     # 注意符号,不是x,而是*   4.除法运算/     # 注意符号,不是÷,也不是\,而是/     # 整数除于整数,还...

weixin_30699955的博客 273

无线充电Qi协议正向通信FSK的解调设计

常见的FSK解调方法是使用频率锁相环(PLL)来跟踪输入信号中的频率变化。PLL根据输入信号的频率变化来生成数字信号,从而实现FSK信号的解调。本文将详细介绍无线充电Qi协议正向通信FSK的解调设计,并提供相应的源代码。在上述示例代码中,我们首先定义了FSK解调的参数,包括采样率、载波频率、每个比特的持续时间和比特判定阈值。最后,通过比较滤波后的信号与比特判定阈值,我们将解调后的数字数据转换为0和1的序列。请注意,上述代码仅为示例,实际的解调设计可能需要根据具体的应用场景和系统要求进行调整和优化。

IunScala的博客 2443

C语言的iOS开发

C语言是一种通用的编程语言,最初由Dennis Ritchie于1972年在贝尔实验室开发。作为一种底层语言,C语言以其效率高、灵活性强和可移植性好而广受欢迎。C语言的灵活性使得它可以用于操作系统、嵌入式系统、编译器等各种领域。C语言提供了高效的性能和精细的内存控制,这些特性对于移动设备开发尤其重要。因此,在iOS开发中,C语言仍然被广泛应用,特别是在处理性能密集型任务和系统级编程时。

2501_91201280的博客 575

数学之美:欣赏超越数e

文章目录一、e为何物?二、利息与e的关系1、利息问题2、计算利息3、欣赏螺旋线(1)螺旋线概述(2)绘制螺旋线三、e和π 一、e为何物? e是一个无限不循环小数,其值约等于2.718281828…,它是一个超越数,有时也称为欧拉数(Euler’s Number)。 以e为底的对数称为自然对数(Natural Logarithm),数学中使用自然这个词的还有自然数(Natural Number)。 这里的“自然”并不是现代人所习惯的“大自然”,而是有点儿“天然存在,非人为”的意思。 二、利息与e的关系

howard2005的专栏 1717

2026年国赛C题微网与外部电网电力调控策略 (三):问题三、问题四滚动预测、实时电价与结果核验

专栏内定期更新ABCDE五题详细思路、代码(含运行结果图)和讲解视频-(11号之前半价):问题三看起来只是多给了一个光伏预报附件,实质上它改变了整道题的信息结构:问题四则是在问题二、问题三之上替换价格来源。问题4-2相当于“确定性计划+实时电价”,问题4-3相当于“滚动预测+实时电价”。物理模型完全不变,改变的是价格序列和费用口径。本文先给出核心结果:从结果看,问题3比问题2多约164.21万元,问题4-3比问题4-2多约168.79万元。主要增量不是“储能没有工作”,而是预测误差、计划偏差和紧急购电造成的

YOLO 343

iOS:枚举enum,NS_ENUM,NS_OPTIONS 定义和 位运算应用

--参考文章:http://blog.youkuaiyun.com/annkie/article/details/9877643 ==定义------------

houseq 的专栏 3689

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C/C++的位运算符操作

 C/C++支持比较低阶的位运算,在是众人皆知的了。每本C/C++的教科书都会说到这部分的内容,不过都很简略,我想会有很多人不知道位运算用在什么地方。这个帖子就简略说说位运算的用处,更进一步的用法要大家自己去体会。而主要说的是操作标志值方面。   考虑一个事物、一个系统、或者一个程序可能会出现一种或者几种状态。为了在不同的状态下,作出不同的行为,你可以设立一些标志值,再根据标志值来做判断。比如C+

HainuCrazy的专栏 3021

Camera2Demo

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

位运算

1:背景 在现代计算机中所有的数据都是以二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。 我们每一种语言最终都会通过编译器转换成机器语言来执行,所以直接使用底层的语言就不需要便编译器的转换工作从而得到更高的执行效率,当然可读性可能会降低,这也是为什么汇编在大部分情况下有更快的速度。项目中合理的运用位运算能...

weixin_30919571的博客 107

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c语言10以内位运算,C语言基础知识--位运算

1.原码,反码,补码:(1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负;其余n-1位为数值位,各位的值可为零或一。当真值为正时,原码、反码、补码数值位 完全相同;当真值为负时,原码的数值位保持原样,反码的数值位是原码数值位的各位取反,补码则是反码的最低位加一。注意符号位不变。2.无符号位运算(1)位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或(2)...

weixin_39899244的博客 453

iOS位运算及联合体位域

目录1. 概述2. 位运算2.1 按位与运算2.2 按位或运算2.3 按位异或运算2.4 取反运算2.5 左移运算2.6 右移运算3. 位域3.1 位域的定义和位域变量的说明3.2 位域的使用3.3 位域总结4. 联合体5. 联合体位域 1. 概述 今天来点概念性的东西,如果在代码中用到位运算和联合体位域,是不是会显得高级一些呢?哈哈。 2. 位运算 在C语言中共提供了6中位运算符,具体如下: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移

郭永明的技术专栏 3789

iOS蓝牙4.0位运算,数据的大小端转换,一些数据补位

在蓝牙项目的开发过程中,会遇到了一些与数据处理有关的问题,本文对这些问题进行了基本的整理并分享给大家。包含如下三个方面的内容。 数据大小端的介绍 大小端数据模式的转换 按位运算,左移、右移运算 大小端以及一些数据补位 一、数据大小端的介绍 网上关于数据大小端的介绍一大堆,为了让文章全面点,本文也就这方面简单说明一下。 a. 大小端表示数据在计算机中的存放顺序。 b. 大端模...

weixin_38496080的博客 2813

iOS 位运算符浅析:与、或、异或、取反、左移、右移

iOS开发中可以使用C语言位运算符主要包括六种:与( & )、或( | )、异或( ^ )、取反( ~ )、左移( >> )和右移(

RollingPin的博客 1100

c语言-位运算

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- c语言提供了六种位运算符: & 按位与 |  按位或 ^ 按位异或 ~取反 >>右移 按位与运算 按位与运算符“&”是双目运算符,其功能是参与运算的两个数个对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则的话则为0.参与运算的数以补码的方式出

iosxuyue的博客 475

二进制位移操作,位运算

1:背景 从现代计算机中所有的数据二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。 我们每一种语言最终都会通过编译器转换成机器语言来执行,所以直接使用底层的语言就不需要便编译器的转换工作从而得到更高的执行效率,当然可读性可能会降低,这也是为什么汇编在大部分情况下有更快的速度。项目中合理的运用位运算能提高我们代...

卿着飞翔 4412
上一篇: C for ios ---进制转换
下一篇: C for ios --- char 类型
ProbuINg
博客等级 码龄14年 10粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值