基础算法:与、或、异或运算

1.与运算(&)

参加运算的两个数据,按二进制位进行“”运算。

运算规则:0&0=0;   0&1=0;    1&0=0;     1&1=1;

即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5  即 0000 0011 & 0000 0101 = 0000 0001   因此,3&5的值得1。

例如:9&5  即 0000 1001 (9的二进制补码)&00000101 (5的二进制补码) =00000001 (1的二进制补码)可见9&5=1。

2.或运算(|)

参加运算的两个对象,按二进制位进行“”运算。

运算规则:0|0=0;   0|1=1;   1|0=1;    1|1=1;

  即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111   因此,3|5的值得7。 

例如:9|5可写算式如下: 00001001|00000101 =00001101 (十进制为13)可见9|5=13

3.异或运算(^)

参加运算的两个数据,按二进制位进行“异或”运算。

运算规则:0^0=0;   0^1=1;   1^0=1;   1^1=0;

  即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

例如:9^5可写成算式如下: 00001001^00000101=00001100 (十进制为12)可见9^5=12

原文地址:https://www.cnblogs.com/duanweishi/p/9972394.html

时间: 2024-11-09 08:52:42

基础算法:与、或、异或运算的相关文章

Java简单的加密解密算法,使用异或运算

package cn.std.util; import java.nio.charset.Charset; public class DeEnCode { private static final String key0 = "FECOI()*&<MNCXZPKL"; private static final Charset charset = Charset.forName("UTF-8"); private static byte[] keyByt

python基础:3.异或运算

1.异或运算 十进制的异或运算,先转成二进制进行异或,按位进行比较,对应位置相同则为0,对应位置不同则为1,,再从异或结果转成十进制. python中: 1 ^ 1 = 0 1 ^ 2 = 3 1 的二进制0000 0001 2 的二进制0000 0010 1 ^ 2 的二进制制是:0000 0011 换算成十进制为3 原文地址:https://www.cnblogs.com/meloncodezhang/p/11272702.html

使用异或运算对数据及文件进行加密处理,附软件及源码

前几天写了一篇文章是在C语言中使用异或运算交换两个任意类型变量,其基础为使用^交换两个整数的算法: a ^= b; b ^= a; a ^= b; 如果你看明白这个算法,就会发现这样的规律:一个数异或另一个数两次后,该数保持不变.即: c = a^b; c = c^b; c == a; 这一规律就是使用异或运算对数据及文件进行加密处理的基本原理. 那就先贴下加密算法的代码: bool XorEncrypt(void* bufPtr, unsigned int bufSize, const cha

强大的异或运算

什么是异或? Wikipedia的解释: 在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^).但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真.转化为命题,就是:"两者的值不同."或"有且仅有一个为真." 定义: 1 ⊕ 1 = 0 0 ⊕ 0 = 0 1 ⊕ 0 = 1 0 ⊕ 1 = 1 真值表:   Y B = 0 B = 1

使用异或运算交换两个任意类型变量

这篇文章中将使用C语言,实现交换两个任意类型变量的功能.说到任意类型用C让人感觉很难做,如果是C++则使用模板函数就轻松搞定: template<class T> inline void swap(T& t1, T& t2) { T tmp; tmp = t1; t1 = t2; t2 = tmp; } 先说下使用^来交换两个整数,其代码看着简单但不容易理解 a ^= b; b ^= a; a ^= b; 有人说这种写法很奇葩,但我要说的是,异或运算是计算机很常用的操作.搞懂这

【基础算法】基础算法【转载】

1. 最大公约数 问题:求两个自然数的最大公约数. 分析:这个是基础的数学问题,最大公约数指两个数字公共的约数中最大的,例如数字6的约数有1.2.3.6,数字9的约数有1.3.9,则数字6和数字9的公共约数有1和3,其中3是最大的公约数. 第一种思路:从1开始循环,每次把符合要求(即同时是两个数字的约数)的值都存储起来,那么最后一个存储起来的就是最大的约数. E:\博客-基础算法-代码\1_a_max_divisor.php: [php] view plain copy <?php /** * 

Java基础-一文搞懂位运算

在日常的Java开发中,位运算使用的不多,使用的更多的是算数运算(+.-.*./.%).关系运算(<.>.<=.>=.==.!=)和逻辑运算(&&.||.!),所以相对来说对位运算不是那么熟悉,本文将以Java的位运算来详细介绍下位运算及其应用. 1. 位运算起源 位运算起源于C语言的低级操作,Java的设计初衷是嵌入到电视机顶盒内,所以这种低级操作方式被保留下来.所谓的低级操作,是因为位运算的操作对象是二进制位,但是这种低级操作对计算机而言是非常简单直接,友好高效

网络误区:不用中间变量交换2个变量的value,最高效的是异或运算.

本文记录了不使用中间变量交换2个变量的value,很多的网络留言说是直接异或运算就可以了,而且效率很高,是真的吗? 关于这个问题,网络上面有很多的解释,3种方法,我这里给比较一下各自的优缺点,然后简单分析一下汇编代码,分析代码如下: #include <stdio.h> void swap1(int &a,int &b) { int temp = a; a = b; b = temp; } void swap2(int &a,int &b) { a += b;

异或运算的应用

异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示, 其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1. 它与布尔运算的区别在于,当运算符两侧均为1时,布尔运算的结果为1,异或运算的结果为0. 异或的性质 交换律:a ^ b = b ^ a 结合律:a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c d = a ^ b ^ c 可以推出 a = d ^ b ^ c 自反性:a ^ b ^ a = b x ^ x = 0, x ^ 0 = x 应用: 1