位运算反(~)与(&)异或(^)或(|)右移(>>)左移(<<)
原文:位运算反(~)与(&)异或(^)或(|)右移(>>)左移(<<)
先知道这两个二进制数据的特点: 1=0000 0000 0000 0000 0000 0000 0000 0001
-1=1000 0000 0000 0000 0000 0000 0000 0001
1.最高位(首位)表示正负(0为正,1为负)
2.最低位(末位)表示奇偶(0为偶,1为奇)
一、按位取反(~)
十进制1按位取反后=?
分析:
1. 十进制1转为二进制为:1= 0000 0000 0000 0000 0000 0000 0000 0001
2. 按位取反:把原来的二进制得到一个新的二进制,原来是0的则变为1,1的则变为0。
1按位取反后得到 1111 1111 1111 1111 1111 1111 1111 1110
3.二进制的最高位(首位)表示正负(1为负,0为正),如果是负数,如果是负数,则需要用计算机中的补码来表示。
补码:补码=符号位(最高位)以后按位取反再加1.
补码为 1000 0000 0000 0000 0000 0000 0000 0010
4. 结果为:把补码转为十进制: -2;
~1==-2
十进制-1按位取反后=?
1. -1的二进制是 1000 0000 0000 0000 0000 0000 0000 0001
2. 负数是以其补码的形式储存的
-1在计算机中存的是 1111 1111 1111 1111 1111 1111 1111 1111
3. 按位取反: 0000 0000 0000 0000 0000 0000 0000 0000
4.结果为:转为十进制:0
~-1==0
二、按位与and(&)
按位与and(&): 相同位的两个数字都为1,则为1;若有一个不为1,则为0。
25&3=> 25= 0000 0000 0000 0000 0000 0000 0001 1001
3= 0000 0000 0000 0000 0000 0000 0000 0011
-------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0000 0001
25&3==1
三、按位异或(^)
按位异或(^):相同位不同则为1,相同则为0
25^3=> 25= 0000 0000 0000 0000 0000 0000 0001 1001
3= 0000 0000 0000 0000 0000 0000 0000 0011
-------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0001 1010
25&3==26
四、按位或(|)
按位或(|):相同位只要一个为1即为1。
25|3=> 25= 0000 0000 0000 0000 0000 0000 0001 1001
3= 0000 0000 0000 0000 0000 0000 0000 0011
-------------------------------------------------------------------------------------
0000 0000 0000 0000 0000 0000 0001 1011
25|3==27
五、右移(>>)
把1的位置向右移n位,超出的就舍掉
15=0000 0000 0000 0000 0000 0000 0000 1111
15>>1=0000 0000 0000 0000 0000 0000 0000 0111
15>>1=7
:右移1位即除以21;,并且取整。
n>>4==n/(24)
64>>4==4
六、左移(<<)
把1的位置向左移n位,超出的就舍掉
:左移1位即乘以21;,并且取整。
n<<4==n*24
2<<4==32
位运算反(~)与(&)异或(^)或(|)右移(>>)左移(<<)的更多相关文章
- php位运算 与 或 异或 取反
<?php /** php中有4个位运算,分别是&与 |或 ^异或 ~取反 & 两位全为1,结果为1 | 有一位为1,结果为1 ^ 一个为0,一个为1,结果为1 ~ 取反0-&g ...
- <位运算> 任意二进制数 异或两个相同的二进制数 还是原本的值
二进制,即0与1. 因为两个相同的二进制 异或必为0.(类似于不进位加法) 二进制里与0异或为其原本的0与1.. 可得任意二进制数 异或两个相同的二进制数 还是原本的值. 可用于交换和加密.
- LeetCode解题中位运算的运用
位运算是我最近才开始重视的东西,因为在LeetCode上面刷题的时候发现很多题目使用位运算会快很多.位运算的使用包含着许多技巧(详细可以参考http://blog.csdn.net/zmazon/ar ...
- 利用位运算进行a+b的计算(Java&&Python)
题目链接 需要用到的位运算操作:异或(^).与(&).右移(<<) 异或运算:又称不进位加法,a^b得到的结果为a与b相加,但是需要进位的地方不进位得到的结果 与运算:找出来a和b ...
- #C语言初学记录(位运算)
位运算 Problem Description7-1 数组元素循环右移问题 一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,即将A中的数据由 ...
- php实现不用加减乘除号做加法(1、善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍)
php实现不用加减乘除号做加法(1.善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍) 一.总结 1.善于寻找资源:去搜为什么位运算可以实现加法,里面讲的肯定要详细一万倍 二.ph ...
- Java中的位运算
昨天去面试的时候做到了一道Java的位运算题目,发现有个运算符不懂:">>>",今天特地查了一下,并小结一下常见的位运算符号: ~ 按位非(NOT)(一元运算) ...
- Java位运算加密
创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,再与那个指定的 ...
- Java的位运算
左移位操作 左移位运算的符号为[<<],左移位运算符左面的操作元称作被移位数,右面的操作数称作移位量. 左移位运算是双目运算符,操作元必须是整型类型的数据,其移动过程是:[a <&l ...
随机推荐
- 一种用单片机AD采样方式来检测交流市电电压的方法
下面介绍一种用单片机AD采样的方式检测市电电压的方法 要检测交流市电的电压,通常有两种方法 一.通过频繁的采样后再求平均值来获得实际电压值 二.通过采样交流市电的峰值,再通过算法得出实际电压值 这里 ...
- Android开源项目分类汇总[转]
Android开源项目分类汇总 如果你也对开源实现库的实现原理感兴趣,欢迎 Star 和 Fork Android优秀开源项目实现原理解析欢迎加入 QQ 交流群:383537512(入群理由需要填写群 ...
- HDU 1166 敌兵布阵(线段树)
题目地址:pid=1166">HDU 1166 听说胡浩版的线段树挺有名的. 于是就拜訪了一下他的博客.详情戳这里.于是就全然仿照着胡浩大牛的风格写的代码. 至于原理.鹏鹏学长已经讲的 ...
- 关于虚拟继承类的大小问题探索,VC++ 和 G++ 结果是有区别的
昨天笔试遇到个 关于类占用的空间大小的问题,以前没怎么重视,回来做个试验,还真发现了问题,以后各位笔试考官门,出题时请注明是用什么编译器. vc6/vc8 cl 和 Dev-C 的g++ 来做的测试: ...
- WinSock IO模型 -- WSAEventSelect模型事件触发条件说明
FD_READ事件 l 调用WSAEventSelect函数时,如果当前有数据可读 l 有数据到达时,并且没有发送过FD_READ事件 l 调用recv/recvfrom函数后,仍然有数据可读时 ...
- java图片处理工具类
直接上代码: package com.zxd.tool; /** * Created by zhang on 14-3-1. * 图片的常用操作类 */ import java.awt.AlphaCo ...
- HTML5新增的属性和废除的属性
HTML5中,在新增加和废除很多元素的同时,也增加和废除了很多属性. 新增的属性 1.表单相关的属性 对input(type=text).select.textarea与button指定autofoc ...
- memcache和数据库的使用技巧
1.加速无数据的访问速度毋庸置疑取数据先去取下memcache里的数据,如果没有再去数据库取数据但这样如果我取100次都是没有的那么我得去数据库去取100次 如果还是重复的...那么效率就不高了 解决 ...
- java编程小技巧
1.缩进与反缩进 缩进:tab 反缩进:shift+tab 2.整段注释和取消整段注释 整段注释:ctrl+shift+/ 取消整段注释:ctrl+shift+\
- Android Fragment用法之给Activity创建事件回调
在某些案例中,可能需要Fragment与Activity共享事件.在Fragment内部定义一个回调接口是一个好方法,并且规定由持有它的Activity实现这个回调方法.当Activity通过接口接受 ...