C/C++ 按位与异或的几个扩展

1)如果 a^b = c 那么就有 c^b = a 以及 c^a = b (穷举法证明)

此规律可以用来进行最简单的加密及解密

2)另外异或运算还能实现不通过临时变量,就能交换两个变量的值(且无溢出风险)

 a = a ^ b;
 b = b ^ a;
 a = a ^ b;
时间: 2024-12-28 21:38:31

C/C++ 按位与异或的几个扩展的相关文章

运算符优先级

1        算术运算符       单目 >双目 >三目 2        关系运算符 3        逻辑运算符      &&高于||      !算术还高高 一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> << 6   > >= <

Poedu_C提高班_Lesson004 课堂笔记

优先级口诀 括号成员排第一: 全体单目排第二: 乘除余三,加减四: 移位五,关系六: 等于不等排第七: 位与异或和位或: "三分天下"八九十: 逻辑或跟与: 十二和十一: 条件高于赋值: 逗号运算级最低! 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 (表达式)/函数名(形参表) . 成员选择(对象) 对象.成员名 -> 成员选择(指针) 对象指针->成员名 2 - 负号运算符 -表达式 右到左 单目运

运算符优先级常识

引用:http://www.cnblogs.com/fengkuangIT/p/4423437.html 1        算术运算符       单目 >双目 >三目 2        关系运算符 3        逻辑运算符      &&高于||      !算术还高高 一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   *

第十六天:C语言进阶之位运算及内嵌汇编

位运算在驱动开发中是经常遇到的,尤其是置0和置1.既要指定的位数发生变化,又不能改变其它位的值.还要高效率的编写代码.这时候技巧就很重要了.在位运算中有几个符号: |  按位或 & 按位与  ^ 异或  -按位非 1 #include<stdio.h> 2 3 int main() 4 { 5 int a = 0x1101; 6 int b = 0x1011; 7 int c = 9; 8 printf("a | b is %x\n",a | b); 9 print

【C语言】符号优先级

一. 问题的引出 今天看阿里的笔试题,看到一个非常有意思的题目,但是很容易出错. 题目:如下函数,在32bit系统foo(2^31-3)的值是: Int foo(int x) { return x&-x; } 解答:如果想要答对这道题目,首先要清楚C语言中符号的优先级别,负号(-)的优先级高于^,所以2^31-3=2^28,还有一个陷阱就是C语言中认为^为异或运算而不是幂函数,所以2^28=30,然后计算30 & -30得出结果.又因为计算机内存中的数据是以二进制的补码形式存在的,所以参与

c语言优先级

一共有十五个优先级: 1   ()  []  .  -> 2   !  ~   -(负号) ++  --   &(取变量地址)*   (type)(强制类型)    sizeof 3   * / % 4   + - 5   >> << 6   > >= < <= 7   == != 8   & 9   ^ 10  | 11  && 12  || 13  ?: 14   =  +=  -=  *=  /=   %=  |=

位运算基本概念及简单运用

C语言提供了六种位运算符: &     按位与    |      按位或    ^      按位异或    ~      取反    <<    左移,相当与*2    >>    右移,正数高位补0,负数由计算机决定 循环左移k次 (x<<k) | (x >> (32-k)), 循环右移k次 (x>>k) | (x << (32-k)) 当然常常应为优先级问题而犯错~~~ 优先级及口诀如下 优先级别 运算符 记忆口诀 1

C语言中的运算符优先级

C语言中的运算符优先级问题,一般是不要求我们记的,但如果能记住,对快速理解代码和编程是有很大帮助的:若能快速记住,何乐而不为呢? 如果你喜欢,建议先下载我整理的运算符优先级pdf文档(http://download.csdn.net/detail/n289950578/7964209),对照一起看,更有助于理解. 1.优先级: 为了理解方便,将优先级分为六大类,速记为<非123赋>: 非运算符  () [] . ->: 单目运算  (!&* 右->左): 双目运算  (左-

运算符和表达式(类型转换)

和其他程序设计语言一样,C语言中表示运算的符号称为运算符.运算符是告诉编译程序执行特定算术或逻辑操作的符号,运算的对象称为操作数. 对一个操作数进行运算的运算符称为单目运算符,对两个操作数进行运算的运算符称为双目运算符,三目运算符对三个操作数进行运算.用运算符和括号可以将操作数连接起来组成表达式. C语言提供了40多个运算符,其中一部分跟其他高级语言相同(例如"+"."?"."*"等运算符),另外的与汇编语言类似,对计算机的底层硬件(如指定的物理