展开

关键词

C的|、||、&、&&、、~、!运算运算

运算符有: &(按位与)、|(按位)、^(按位)、~ (按位取反)。 ~取反为单目,其余都是双目运算符。 若要把这结果赋给变量j,可写成: j = 017|j (3)按位运算符(^) 按位运算将两个运算分量的对应位按位遵照以下规则进行计算: 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 0 = 运算的意思是求两个运算分量相应位值是否相异,相异的为1,相同的为0。按位运算的典型用法是求一个位串信息的某几位信息的反。 如欲求整型变量j的最右4位信息的反,用逻辑运算017^j,就能求得j最右4位的信息的反,即原来为1的位,结果是0,原来为0的位,结果是1。 |、||、&、&&、、~、!

55730

运算

运算运算在一些场景中使用的话,会得到意想不到的效果。 比如通过三次 位 运算可以用于交换两个数的值: // 通过三次位运算可以实现两个整数的交换 int a = 12; int b = 10; a = a ^ b; // : 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 即位运算相同为0, 不同为1(无进位相加) 位运算满足交换律和结合律 a ^ b = b ^ a (a ^ b) ^ c = a ^ (b ^ c) 注意:特殊情况 a ^ a = 0 a ^ 0 = a 可以通过以下的Java代码看运算的一些使用示例: /* 位运算 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0 位运算相同为0, 不同为1(无进位相加) 位运算满足交换律和结合律

16920
  • 广告
    关闭

    腾讯云校园大使火热招募中!

    开学季邀新,赢腾讯内推实习机会

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python 运算

    本文出自 “风轻云淡” 博客,请务必保留此出处http://beyond99.blog.51cto.com/1469451/407820 a⊕b = (¬a ∧ b) ∨ (a ∧¬b) ab

    51610

    c语言中按位运算,^按位运算符「建议收藏」

    ^表示按位运算符,顾名思义,相异,即不同则为1,反之为0 例如15和16进行运算运算过程如下:15 0000 0000 0000 0000 0000 0000 0000 1111 16 0000 0000 0000 0000 0001 0000 ^ —————————————— 0000 0000 0000 0000 0000 0000 0001 1111 可以看到,经过按位运算后 ,其结果变成十进制应为31,大家务必弄清楚运算过程,然后再上机验证,代码如下:#include int main() { int a; a=15^16; printf(“a=%d\n”,a); return 0; } 运算结果为:a=31 运算符的作用指定位数的翻转 如想对某个数字的低4位进行翻转,则可以将这个数字与15(二进制为00001111)进行按位运算,既可以将原数字的低四位进行翻转,即高四位不变 ,低四位0变1,1变0 与0还是原值 大家可以自行实验,一个数字与0进行,结果还是原值 交换两个数字 除了之前我们学习交换两个数字需要第三个变量做中介之外,如今可以通过运算进行,代码如下:#

    800

    运算 XOR 教程

    大家比较熟悉的逻辑运算,主要是"与运算"(AND)和"运算"(OR),还有一种"运算"(XOR),也非常重要。 本文介绍运算的含义和应用。 ? 3.1 简化计算 多个值的运算,可以根据运算定律进行简化。 a ^ b ^ c ^ a ^ b = a ^ a ^ b ^ b ^ c = 0 ^ 0 ^ c = c 3.2 交换值 两个变量连续进行三次运算,可以互相交换值。 下面就是x和y进行三次运算,注释部分是每次运算后两个变量的值。 3.3 加密 运算可以用于加密。 第一步,明文(text)与密钥(key)进行运算,可以得到密文(cipherText)。

    52630

    运算的秒用--运算

    先不要着急,咱们来一点一点的分析 运算 想要看懂上面的代码,首先你得知道什么叫运算。 先看定义 如果a、b两个值不相同,则结果为1。如果a、b两个值相同,结果为0。(这特么是啥?) 0,如果值不同,则对应位置运算的结果为1 运算示意图 所以a和b的运算的结果为 110 也就是6 运算也可以按照另外一个角度去理解,就是「无进位的加法」,其实也就是二进制的相加,但是加完的结果不进位而已 运算的特点 0和任何数N进行运算,结果为N 其实这个很好理解,任何数转换成二进制,每一位上的数字要么是0,要么是1,而和0进行,以前是0的位置和0相同,则结果为0,以前是1的位置和0不同,则结果为 1,所以运算之后结果是没变的,如下图 任何数和0进行运算 任何数N和自己进行运算,结果为0 这个也很好理解,N^N每一位肯定都会是一样的,根据运算的法则,结果肯定每一位都为0 任何数和自己进行运算 运算满足交换律和结合律 这个很好理解 也就是说 a^b^c运算c^b^a是一样的 再来看开头的例子 当你对运算有一定的了解了之后,咱们再来看一看开头的例子 func Swap(a, b

    5510

    python中的运算

    def singleNumber(self, nums: List[int]) -> int: return reduce(lambda x, y: x ^ y, nums) 查了一下运算 ,发现找到唯一值是运算在python中的主要用途之一。 其原理是这样的: a = 10 b = 76 print(a ^ b) 输出:70 当a,b都转换为二进制: bin(a) bin(b) 输出:0b1010与0b1001100 运算是将两个数相同位置 当两个数相同时,运算结果为0.

    1.9K40

    运算(XOR)

    Table of Contents XOR是什么 XOR的运算规则 XOR的应用 References XOR是什么 是计算机的逻辑运算 XOR的运算规则 相同为0, 不同为1 1000 ^ 1001 的运算过程如下 1001 1000 =0001 XOR的应用 ---- 判断两个数是否相等 通过判断两个数结果是否为0来判断两个数是否相等 int a=10,b=20,c=10; a^b 不是0, 所以不相等 a^c 是0, 所以相等 不用第三个变量来交换两个数 int a = 10; int b = 20; a = a^b; 0 : (h = key.hashCode()) ^ (h >>> 16); } //h >>> 16 是为了将高位移向地位 //运算 是因为index = (n-1) & hash; n是数组的长度, 为了防止hash散列冲突 //java7的是hash % n, java8用无符号右移是因为位运算快 References https://hackernoon.com

    63610

    按位与、运算方法

    按位运算符(|) 参加运算的两个对象,按二进制位进行“运算运算符(^) 参加运算的两个数据,按二进制位进行“运算。 “运算”的特殊作用: (1)使特定位翻转找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位即可。 (2)与0相,保留原值 ,X ^ 0000 0000 = 1010 1110。 从上面的例题可以清楚的看到这一点。 取反运算符(~) 参加运算的一个数据,按二进制位进行“取反”运算。 以“与”运算为例说明如下:我们知道在C语言中long型占4个字节,int型占2个字节,如果一个long型数据与一个int型数据进行“与”运算,右端对齐后,左边不足的位依下面三种情况补足, (1)如果整型数据为正数

    44730

    C 关于使用运算交换两数的值

    运算可以达到交换两数的目的,代码如下: ? 但不推荐使用这种方式,附上常用的临时变量方法对比说明。 临时变量方法: ? 对于临时变量法,每次赋值只要读取一个变量的值到寄存器,然后再从寄存器写回到另一个变量中即可,前后涉及两次内存写入操作;但是对于运算操作,每次都需要读取两个数据到寄存器中,再进行运算操作,之后把结果写回到变量中 另外一点,操作的代码可读性差。 如果使用C语言实现上述两种方法,并用gcc编译器编译,可以使用命令 gcc -S swap.c 查看相应的汇编代码,临时变量法代码行数更少,另外使用 gcc 编译器时,用运算交换数组会出错,参见链接 最后附上两张三种方法编译后对应汇编代码对比图(平台:Ubuntu14.04,gcc 4.8.4),图中 swap1.c 文件对应临时变量法,swap2.c 文件对应加减方法,swap3.c 文件对应方法

    47940

    HDOJ 1287 破译密码(运算

    Problem Description 有个叫“猪头帮”的国家,采用一种简单的文法加密,他们所用的语言里面只有大写字母,没有其他任何字符;现在还知道他们加密的方法是:只用一个大写字母和原文进行运算生成密文 按位的3个特点: (1) 0^0=0,0^1=1 0任何数=任何数 (2) 1^0=1,1^1=0 1任何数-任何数取反 (3) 任何数自己=把自己置0 按位的几个常见用途 : (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位运算。       位运算就是二进制整数运算. 两个数按位意思就是从个位开始,一位一位的比. 如果两个数相应的位上一样,结果就是0,不一样就是1 所以111^101=010 那加密的过程就是逐个字符跟那个secret字符运算.

    14320

    利用运算实现字符串加密C语言实现

    一个数另一个数两次后,该数保持不变。即: c = a^b; c = c^b; c == a; 将需要加密的内容看做A,密钥看做B,A ^ B=加密后的内容C。 而解密时只需要将C ^ 密钥B=原内容A。如果没有密钥,就不能解密! 这一规律就是使用运算对数据及文件进行加密处理的基本原理。 那就先贴下加密算法的代码: C #include <stdio.h> #include <stdlib.h> #include <string.h>   #define KEY 0x86   int

    93220

    C语言 | 学习使用^

    例92:学习C语言按位^ 。 解题思路:按位与&、按位|、按位^,与1进行位与&运算,值保持不变;与0进行位与&运算,值清0;按位与&常用于将整型变量中某些位清0,而其他位保持不变。 与1进行位|运算,值置1;与0进行位|运算,值保持不变;按位|常用于将整型变量中某些位置1,而其他位保持不变。 与1进行位^运算,值取反;与0进行位^运算,值保持不变;按位^常用于将整型变量中某些位取反,而其他位保持不变。 C语言源代码演示: #include<stdio.h>//头文件  int main()//主函数  {   int num1,num2;//定义整型变量    num1=077;   num2=num1 公众号:C语言入门到静通

    22932

    运算的秒用--运算面试真题

    前言 上次咱们聊了聊运算的妙用,其实简单来说,就是记住运算的三个特性 0和任何数N进行运算,结果为N 任何数N和自己进行运算,结果为0 运算满足交换律和结合律 当然如果您对这几个特性不是很了解 所以咱们必须得换个思路 利用运算的规律来解题 首先,在运算中「任何数N和自己进行运算,结果为0」,所以我们把数组中的所有数进行运算,所有「出现偶数次的数字进行运算结果为0」,咱们来看一个例子 (因为运算满足交换律,所以不用关心数字出现的位置) arr = [a,b,b,c,c,c,c,d,d.............] 比如看上述数组,咱们来对每个元素进行运算 temp = a ^ b ^ b ^ c ^ c ^ c ^ c ^ d ^ d 因为「任何数N和自己进行运算,结果为0」所以除了a以外的数字,结果为 0 所以全部进行运算一次的结果为 temp = a^0 其实简单的说就是两个b结果为0,两个c结果是0(上面的case写了4个c,其实结果是一样的),两个d结果为0,那么所有的数字下来

    7420

    运算的常见用法总结

    (^) 这个位操作运算符相信大家一定都不陌生,这个运算符可以用来解决很多普通算法解决不了的问题,而且位运算是直接对二进制码做运算,相对普通的加减乘除运算符来说的话更加的高效,我们借着题目一起来看看。 和 1,你可以把这两个数看成是 true 和 false,这样更好理解,我们可以先通过塞选出不用进位的情况,然后再用与运算和左移运算计算出进位的情况,迭代更新出最后的结果。 解法思路 的简单应用,两个数做的结果就是两个数差异所在,然后只需计算这个结果中有多少个 1 即可。 解法思路 的三个点顺下来,就可以很清楚地解这道题: 运算和乘法一样,位置和运算顺序不影响最后结果:a^b^c = b^c^a 两个相同的数做运算结果为零:a^a = 0 任何数和零做结果还是这个数本身 解法思路 这题的主要难点是如何把两个数给拆出来,如果直接运用算法,我们最后得到的结果是两个数做的结果,关键点是如何基于这个的结果来找到这两个数,有一点很重要的就是,的结果为 1 的点位只会出现在其中一个数中

    41350

    算法篇:位运算的使用(一)

    算法: 在位运算中,运用最多的便是操作^,规则如下所示: 1.a^a = 0 ,a^0 = a, 2.a^b^a= a^a^b = 0^b = b 备注:下面的两个题目是单纯使用操作的题目, 一种是最基本的操作, 一种是稍作转换就可以完成的变形题目。 题目1: 的基本使用 https://leetcode-cn.com/problems/single-number/ ? ,的使用,a^a = 0 ,a^0 = a, // 因为题目是两个数,和一个数,属于^的完美使用范畴, // 由公式:a^b^a= a^a^b = 0^b = b,可以直接将代码取操作, //结果就是那个个数为 :通过,最终获取这两个数字的结果a^b=0xiiiii, // 这里只要是bit!

    16431

    C语言 | 学习按位^

    “要成为绝世高手,并非一朝一夕,除非是天生武学奇才,但是这种人…万中无一” ——包租婆 这道理放在C语言学习上也一并受用。 在编程方面有着天赋异禀的人毕竟是少数,我们大多数人想要从C语言小白进阶到高手,需要经历的是日积月累的学习。 那么如何学习呢?当然是每天都练习一道C语言题目!! ? 作者 闫小林 白天搬砖,晚上做梦。 例92:学习C语言按位^ 。 解题思路:按位与&、按位|、按位^,与1进行位与&运算,值保持不变;与0进行位与&运算,值清0;按位与&常用于将整型变量中某些位清0,而其他位保持不变。 与1进行位|运算,值置1;与0进行位|运算,值保持不变;按位|常用于将整型变量中某些位置1,而其他位保持不变。 与1进行位^运算,值取反;与0进行位^运算,值保持不变;按位^常用于将整型变量中某些位取反,而其他位保持不变。

    20942

    Java的位运算符详解实例——与(&)、非(~)、(|)、(^)

    运算符主要针对二进制,它包括了:“与”、“非”、“”、“”。 :+(a|b));}}运行结果a 和b 的结果是:129下面分析这个程序段:a 的值是129,转换成二进制就是10000001,而b 的值是128,转换成二进制就是10000000,根据运算符的运算规律 public class data15{public static void main(String args){int a=15;int b=2;System.out.println(a 与 b 的结果是 :+(a^b));}}运行结果a 与 b 的结果是:13分析上面的程序段:a 的值是15,转换成二进制为1111,而b 的值是2,转换成二进制为0010,根据运算规律,可以得出其结果为1101 位运算是对整数的二进制位进行相关操作,详细运算如下: 非位运算值表 A~A10  0 1 与位运算值表 ABA&B111100010000 运算值表 ABA | B111101011000 运算值表

    41810

    十六进制运算法则_位运算

    (a | b) 输出结果 61 ,二进制解释: 0011 1101 ^按位运算符:当两对应的二进位相异时,结果为1a ^ b) 输出结果 49 ,二进制解释: 0011 0001 ~按位取反运算符: xor = str; } } return newstring; } 三 1、(xor)是一个数学运算符。 它应用于逻辑运算。 2、的数学符号为“⊕”,计算机符号为“xor”。其运算法则为:a⊕b = (¬a ∧ b) ∨ (a ∧¬b) 3、如果a、b两个值不相同,则结果为1。 如果a、b两个值相同,结果为0

    1.8K20

    奶牛

    奶牛 链接:https://ac.nowcoder.com/acm/problem/22998?&headNav=acm 来源:牛客网 题目描述 农民约翰在喂奶牛的时候被另一个问题卡住了。 帮助农民约翰找出应该从哪一头奶牛开始喂,使得从这头奶牛开始的一个连续的子序列上,奶牛的附加值的最大。 如果有多个这样的子序列,选择结尾的奶牛社会等级最高的。如果还不唯一,选择最短的。 输出描述: 第 1 行: 3个空格隔开的整数,分别为:最大的值,序列的起始位置、终止位置。 示例1 输入 5 1 0 5 4 2 输出 6 4 5 说明 最大异值为6,从第4个开始喂,到第5个结束。 4 2 = 6 (100) (010) = (110) 思路:利用、前缀的性质,这种题目一看就是要用线性复杂度,建立一颗字典树,树上每一个值都是1-n的某一项前缀,然后查询的时候就可以按照找两个最大的模板

    30830

    扫码关注腾讯云开发者

    领取腾讯云代金券