原码 反码 补码 及 python的位运算
来源:互联网 发布:微信联系人数据库恢复 编辑:程序博客网 时间:2024/05/29 11:17
令计算机字长为8位
原码: 正数转化为2进制,负数第一位取1。
1 : 0000 0001
-1 : 1000 0001
反码:
正数的原码不变,负数为原码符号位不变,其余取反。
1 : 0000 0001
-1 : 1111 1110
补码:
正数原码不变,负数为原码符号位不变,其余的按位取反再加一,故1000 0000
可以表示为-128
1: 0000 0001
-1 :1111 1111
在这个链接里面有原理的详尽的解释:
https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html
Python中的按位运算符有:左移运算符(<<),右移运算符(>>),按位与(&),按位或(|),按位翻转(~)。这些运算符中只有按位翻转运算符是单目运算符,其他的都是双目运算符。
python中的&:
A&B
利用A,B的补码按位与(1&1=1,1&0=0,0&0=0),然后把得到的补码还原,1&1=1
python中的|:
A|B
利用A,B的补码按位并(1|1=1,1|0=1,0|0=0),然后把得到的补码还原。1|0=1
python中的^:
A^B
利用A,B的补码按位异或(1^1=0,1^0=1,0^0=0,即相同为0,不同为1),然后把得到的补码还原。1^1=0
python中的~:
~A
A的补码按位取反(~1=0,~0=1),得到的为补码,输出还原结果。~1=-2(因为1的补码为0000 0001,按位取反为1111 1110 这个是-2的补码)
python中的>>:
A>>n
A的补码按位向右移动n位,左边缺少的地方补符号位(即正数补0,负数补1)(相当于除以2的n次方取整 -8>>1=-8//2=-4 -8>>2=-8//4=-2)
python中的<<:
B<< n
B的补码按位向做移动n为,右边缺少的补0(相当于乘以2 ,4<<1=4*2=8,4<<2=4*4=16)
注意:python的<<,与c和java中的不一样,因为他们有字符长度,8位,16位,32位,所以32位为例,如果1<<31=-2147483648,1<<32=0,因为高位溢出,但是在python中1<<31=2147483648,1<<32=4294967296,因为在python中整数是不限长度的(即不存在高位溢出)
这篇文章讲的比较详细,但是例子有错误:http://blog.csdn.net/xtj332/article/details/6639009
- 原码 反码 补码 及 python的位运算
- PHP中位运算及原码,反码和补码
- 位运算符及原码、反码和补码
- 原码,补码,反码与位运算
- 位运算和原码,反码,补码
- c语言的原码补码反码-位运算
- 原码,反码,补码及运算
- 原码,反码,补码及运算
- 原码,反码,补码及运算
- 原码,反码,补码及运算
- 原码,反码,补码 及 移位运算
- 原码反码补码和python中的按位运算易混点
- 位运算详解(原码<-->反码<-->补码)
- 二进制(原码,反码,补码),位运算原则:
- 原码补码反码以及位运算符
- 位运算——原码反码补码
- Java二进制,原码、反码、补码、位运算
- C语言之位运算/原码/反码/补码
- Python:把help的结果输出至文件
- Cookie简介
- 解决node-ffi在Windows XP上使用出现“Error: The specified procedure could not be found”的错误
- docker 部分常用命令及其功能笔记汇总
- 在eclipse中怎么执行sql语句
- 原码 反码 补码 及 python的位运算
- python实现验证码
- Android_Java--二分法查找
- unity 《专题系列》资源打包 Asset Bundles 第五节 Asset Bundles 依赖打包和加载
- botan2 编译
- 二叉查找树的
- leetcode题解-58. Length of Last Word
- c:文本文件的读写(simple版)
- Python:读取Word的内容