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基础」位运算的更多相关文章

  1. C语言基础知识--位运算

    1.原码,反码,补码: (1)在n位的机器数中,最高位为符号位,该位为零表示为正,为一表示为负:其余n-1位为数值位,各位的值可为零或一.当真值为正时,原码.反码.补码数值位 完全相同:当真值为负时, ...

  2. java基础之位运算

    java中常见的位运算符:&(逻辑与) |(逻辑或) ~(取反) ^(逻辑异或) >>(右移) <<(左移) >>>(无符号右移) &(逻辑与 ...

  3. java ----> 基础之位运算

    package test.ant; import java.util.Arrays; import java.io.UnsupportedEncodingException; public class ...

  4. day04-Python运维开发基础(位运算、代码块、流程控制)

    # (7)位运算符: & | ^ << >> ~ var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 " ...

  5. 黑马程序员_毕向东_Java基础视频教程——位运算练习(随笔)

    位运算(练习) 最有效率的方式算出 2乘以 8等于几 2 << 3 = 2 * 2^3 = 2 * 8 = 16 对于两个整数变量的值进行互换(不需要第三方变量) class Test { ...

  6. 【LOJ】#2075. 「JSOI2016」位运算

    题解 压的状态是一个二进制位,我们规定1到n的数字互不相同是从小到大,二进制位记录的是每一位和后一个数是否相等,第n位记录第n个数和原串是否相等,处理出50个转移矩阵然后相乘,再快速幂即可 代码 #i ...

  7. 【PHP基础】位运算与原码,反码,补码

    对于有符号的而言:   ①二进制的最高位是符号位: 0表示正数,1表示负数   ②正数的原码,反码,补码都一样   ③负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)    ...

  8. 2.2 Go语言基础之位运算操作

    一.位运算符 位运算符对整数在内存中的二进制位进行操作. 运算符 描述 & 参与运算的两数各对应的二进位相与. (两位均为1才为1) | 参与运算的两数各对应的二进位相或. (两位有一个为1就 ...

  9. 「vue基础」一篇浅显易懂的 Vue 路由使用指南( Vue Router 上)

    大家好,今天的内容,我将和大家一起聊聊 Vue 路由相关的知识,如果你以前做过服务端相关的开发,那你一定会对程序的URL结构有所了解,我没记错的话也是路由映射的概念,需要进行配置. 其实前端这些框架的 ...

随机推荐

  1. 剪邮票--蓝桥杯--dfs--思路超清晰

    剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...

  2. poj1318 Word Amalgamation 字符串排序(qsort)

    Word Amalgamation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9794   Accepted: 4701 ...

  3. select简单示例,有注释

    全部都在代码中: import select import socket import queue """ 简单的select 实现echo server 个人理解: s ...

  4. 如何发布一个包到npm && 如何使用自己发布的npm包 && 如何更新发布到npm的package && 如何更新当前项目的包?

    如何发布一个包到npm First 在https://www.npmjs.com注册一个账号. Second 编辑好项目,文件大致如下: 其中,gitignore可以如下: .DS_Store nod ...

  5. Android:Sqlitedatabase学习小结

    今天刚刚学习完Sqlite数据库的基础知识,随即把学到的东西记录下来,以便随后查阅,以下是自己对Sqlite数据库的小结:1.Sqlite简介       Sqlite是一款轻型的数据库,它包含在一个 ...

  6. CountDownLatch 多线程,等待所有线程结束

    CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待. 主要方法 public CountDownLatch(int count); 构造 ...

  7. MYSQ系列-MYSQL基础增强(Mysql基本语句)

    MYSQL基础增强 库操作 创建一个使用UTF-8字符集的数据库: create database mydb character set UTF8; 创建一个带校对集的数据库 create datab ...

  8. SQL脚本整理系列 三

    触发器 SQL 2008 怎么实现删除学生表里面的一条记录,成绩表里面关于这个学生的记录也同时删掉,谢求具体代码 --创建表 DROP TABLE tstudent GO CREATE TABLE t ...

  9. 【转】sqlserver字符串拆分(split)方法汇总

    Java..net等开发工具具有split功能,最近在Sqlserver中碰到这个需求. 方法1:动态SQL法 ),) set @string='1,2,3,4,5,6,7,8,9,10' set @ ...

  10. Linux配置JDK1.8环境变量

     每次感觉配这个都很简单,但每次都要查一下,毕竟配错一点 后面都比较麻烦,记录一下,方便以后查看. linux 下安装jdk和windows下的安装是一样的,之前在windows安装的时候是先下载压缩 ...