「C基础」位运算
0. 原码、补码、反码
初学者只做了解即可 见 张子秋的博客
无论正负数,在内存中存储的都是补码
正数:反码 == 原码 == 补码
负数:反码 == ~原码
补码 == 反码+1
1. & 按位 与「AND」
功能:对应的两个二进位 均为1 时,结果 为1,否则 为0
例子:9&5 = 1001&0101 = 0001,即 9&5=1
*规律:二进制中与 1& 保持原位,与 0& 为0
2. | 按位 或「OR」
功能:对应的两个二进位 只要有一个为1 时,结果 为1,否则 为0
例子:9|5 = 1001|0101 = 1101,即 9|5=13
3. ^ 按位 异或「XOR,EOR」
功能:对应的两个二进位 不相同 为1,否则 为0
例子:9^5 = 1001^0101 = 1100,即 9^5=12
*规律:同一整数 相异或 为0, 例:5^5=0
不同整数 相异或 结果和顺序无关,例:5^6^7 = 5^7^6
任何数 和 0 异或 结果不变, 例:x^0 = x
综上,x^y^x = x^x^y = 0^y = y
4. ~ 按位 取反「NOR」
功能:对整数的 每一位取反,符号也位取反「取反:0取反为1,1取反为0」
例子:~9 = -10
5. << 左移
格式:整数<<左移个数
例子:x << n
实质:x * 2n
操作:把 x 的二进制位 向左移动 n 个单位,高位丢弃,低位补0
6. >> 右移
格式:整数>>右移个数
例子:x >> n
实质:x / 2n
操作:把 x 的二进制位 向右移动 n 个单位,低位丢弃,符号位不变
注意:符号位也跟着移动, 右移不改变整数的正负, 最后符号位要调整为原来的数值
正数 符号位为 0, 最高位补0
负数 符号位为 1, 最高位补1「取决于编译器的规定,这里以MAC的编译器为准」
7. 应用 「了解即可」
数值转换:
int a = ;
int b = ;
//1. 借助第三方变量
int temp;
temp = a;
a = b;
b = temp; //2. 不借助额外空间,数学方法
a = b - a;
b = b - a;
a = b + a; //3. 不借助额外空间,位运算
a = a ^ b;
b = a ^ b;
a = a ^ b;
奇偶判断:
int a=;
// 方法1 取模判断
// 注:这里由于 printf()是有返回值「输出的字符串长度」
// 所以可以用 三位运算符 条件?值:值
a%?printf(“奇数\n”):printf(“偶数\n”); // 方法2 与1判断
// 由于:奇数,二进制最后一位是 1
// 偶数,二进制最后一位是 0
// 1 & X = X的二进制最后一位
a&?printf(“奇数\n”):printf(“偶数\n”);
「C基础」位运算的更多相关文章
- C语言基础知识--位运算
1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...
- java基础之位运算
java中常见的位运算符:&(逻辑与) |(逻辑或) ~(取反) ^(逻辑异或) >>(右移) <<(左移) >>>(无符号右移) &(逻辑与 ...
- java ----> 基础之位运算
package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...
- day04-Python运维开发基础(位运算、代码块、流程控制)
# (7)位运算符: & | ^ << >> ~ var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 " ...
- 黑马程序员_毕向东_Java基础视频教程——位运算练习(随笔)
位运算(练习) 最有效率的方式算出 2乘以 8等于几 2 << 3 = 2 * 2^3 = 2 * 8 = 16 对于两个整数变量的值进行互换(不需要第三方变量) class Test { ...
- 【LOJ】#2075. 「JSOI2016」位运算
题解 压的状态是一个二进制位,我们规定1到n的数字互不相同是从小到大,二进制位记录的是每一位和后一个数是否相等,第n位记录第n个数和原串是否相等,处理出50个转移矩阵然后相乘,再快速幂即可 代码 #i ...
- 【PHP基础】位运算与原码,反码,补码
对于有符号的而言: ①二进制的最高位是符号位: 0表示正数,1表示负数 ②正数的原码,反码,补码都一样 ③负数的反码=它的原码符号位不变,其它位取反(0->1,1->0) ...
- 2.2 Go语言基础之位运算操作
一.位运算符 位运算符对整数在内存中的二进制位进行操作. 运算符 描述 & 参与运算的两数各对应的二进位相与. (两位均为1才为1) | 参与运算的两数各对应的二进位相或. (两位有一个为1就 ...
- 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)
大家好,今天的内容,我将和大家一起聊聊 Vue 路由相关的知识,如果你以前做过服务端相关的开发,那你一定会对程序的URL结构有所了解,我没记错的话也是路由映射的概念,需要进行配置. 其实前端这些框架的 ...
随机推荐
- Java调度线程池ScheduleExecutorService(续)
链接 Java线程池详解(一) Java线程池详解(二) Java调度线程池ScheduleExecutorService 上面列出了最近写的关于java线程池ScheduleExecutorServ ...
- stream4
import java.util.Comparator; import java.util.function.BinaryOperator; public class BinaryOperatorTe ...
- Immutable-不变模式与不变类
不变模式的定义 一个对象在创建之后就不再变化,就是所谓的不变模式(Immutable Pattern): 一般来讲,一个对象要么就是可变对象(Mutable Object),要么就是不变模式(Immu ...
- 基于 jdk1.7 发布一个 WebService 服务
1 服务端的发布 第一步: 创建一个 Java 项目第二步: 创建一个类, 加入 Webservice 注解第三步: 提供一个方法 sayHello第四步: 在 main 方法中调用 jdk 提供的发 ...
- Java实现Ip代理池
设置Ip代理很多时候都会有用到,尤其是在写爬虫相关项目的时候.虽然自己目前没有接触这种需求,但由于最近比较闲,就写着当作练习吧 爬取代理IP 爬取 关于爬取代理IP,国内首先想到的网站当然是 西刺代理 ...
- ActivityGroup和TabActiviy的差异性?
TabActivity功能比较专一,就是做主界面Activity切换用的,所以定制性方面也就限制了许多,而且修改麻烦,不便于维护.ActivityGroup也是用来管理多个Activity的,但是功能 ...
- Android中用Java代码实现zip文件解压缩
如果需要下载的文件有很多是中文名的,解压时有中文名的文件出现乱码,试了很多方法不能解决问题.据说有一个Java插件包,用这个插件包可以解决中文名乱码的问题,但不知解压的文件是否要用它提供的类压缩后的文 ...
- 如何看linux是32位还是64位--转
地址:http://hi.baidu.com/hehongrong/item/20c296bcf8d834432aebe3b2 如何看linux是32位还是64位 如何看linux是32位还是64位 ...
- nyoj 206——矩形的个数——————【dp或公式】
矩形的个数 时间限制:1000 ms | 内存限制:65535 KB 难度:1 描述 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3 ...
- UML建模—EA创建Use Case(用例图)
用例图主要用来描述“用户.需求.系统功能单元”之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. 1.新建用例图 2.用例图工具: 3.一个简单用例: 用例图所包含的元素如下: 1. Act ...