位运算符,原码、反码、补码

按位运算就把数字转换为机器语言->二进制的数字来运算的一种运算形式。

& 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
| 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1
^ 按位异或运算符:当两个对应的二进位相异时,结果为1
~ 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。将二进制数+1之后乘以-1,即~x=-(x+1),-(101+1)=-110
<< 左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0
>> 右移动运算符:把">>"左边的运算数的各二进位全部右移动若干位,">>"右边的数指定移动的位数

只有按位取反运算符是单目运算符,其他都是双目运算符。

a = 60  # 0011 1100
b = 13  # 0000 1101

print(a&b)
# 12
print(a|b)
# 61
print(a^b)
# 49

# 按位取反,1100 0011
print(~a)
# -61

# 向左移动两位,1111 0000
print(a<<2)
# 240

# 向右移动两位,0000 1111
print(a>>2)
# 15

计算机中的符号数有三种表示方法,三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”。

在计算机系统中,数值一律用补码来表示和存储。

原码: 正数转化为二进制,负数第一位取1。5=>0b101,1=>0b1,-1=>-0b1
1:0000 0001
-1:1000 0001
反码: 正数的反码与原码相同,负数的反码符号位不变其余按位取反
1:0000 0001
-1:1111 1110
补码:正数的补码与原码相同,负数的补码符号位不变其余按位取反后+1
1:0000 0001
-1:1111 1111
负数的表示方法
- 早期数字电路的CPU中的运算器实现了加法器,但是没有减法器,减法要转换成加法
- 负数在计算机中使用补码存储,-1的补码为 1111 1111
- 5-1 => 5+(-1)直觉上是0b101-0b1,其实计算机中是0b101+0b11111111,溢出位舍弃

5+(-1)两个二进制数相加,逢2进1
0000 0101
1111 1111
---------
0000 0100
print(~12)
# -13

12:0000 1100
取反:1111 0011

# 反推
1111 0010
1000 1101
print(10^9)
# 3
0000 1010
0000 1001
---------
0000 0011
print(10^-9)
# -3

# -9的补码
1000 1001
1111 0111

# 用-9的补码与10的补码进行抑或运算
0000 1010
1111 0111
---------
1111 1101

# 把得到的补码还原。反推,将上面的结果-1然后取反,符号位不变
1111 1100
1000 0011

参考:

http://www.runoob.com/python3/python3-basic-operators.html

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

https://blog.csdn.net/wangfei8348/article/details/51744311

原文地址:https://www.cnblogs.com/keithtt/p/9393756.html

时间: 2024-10-29 07:43:12

位运算符,原码、反码、补码的相关文章

&lt;13&gt;【了解】计算机中的进制+【理解】原码反码补码基本概念+【理解】为什么要引入反码、补码?+【掌握】位运算符介绍及使用+位运算应用:编程实现10进制转2进制

1 #include <stdio.h> 2 3 int main(int argc, const char * argv[]) { 4 5 //定义10进制数,打印出10.8.16进制的值 6 int a = 13; 7 printf("%d\n",a); 8 printf("%o\n",a); 9 printf("%x\n",a); 10 11 //int 64 4个字节 12 int b = 0b0000000000000000

C语言原码反码补码与位运算.

目录: 一.机器数和真值     二.原码,反码和补码的基础概念     三.为什么要使用原码,反码和补码     四.原码,补码,反码再深入     五.数据溢出测试     六.位运算的运算说明     七.位运算的简单应用   一.机器数和真值 机器数(computer number)是数字在计算机中的二进制表示形式 机器数有2个特点:一是符号数字化,二是其数的大小受机器字长的限制 比如:十进制中的+6,计算机字长为8位,转换成二进制就是00000110,如果是-6,就是10000110

关于 原码 反码 补码 位运算

二进制 原码:最高位为符号位,0为正  1为负 正数的原码 反码 补码 都是相同的 反码:负数的反码为原码符号位不变 其它对应变化(1变0 0变1) 补码:等于 反码+1 3^-3 =? 运算过程 -3 10000000 00000000 00000000 00000011 原码 11111111 11111111 11111111 11111100 反码 先求得-3的补码 11111111 11111111 11111111 11111101 补码 得到3的补码 00000000 000000

java原码,反码,补码 位运算

原码是什么?反码是什么?补码是什么? 原码:正数:正数转换为二进制位就是这个正数的原码负数:负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码 int 2 原码: 00000000 00000000 00000000 00000010 int -2 原码:10000000 00000000 00000000 00000010 00000000 00000000 00000000 00000011 # 3原码10000000 00000000 00000000 00000011 # -3原

[C++基础]原码/反码/补码、二进制位运算

原码/反码/补码 编码 定义 实例 原码 最高位为符号位,"0"表示正,"1"表示负,其余位表示数值的大小. [+100]原=01100100 [+0]原=00000000 [-100]原=11100100 [-0]原=10000000注意:在原码中,零有两种表示形式. 反码 正数的反码与其原码相同:负数的反码是对其原码逐位取反,但符号位除外. [+100]反=01100100 [+0]反=00000000 [-100]反=10011011[-0]反=1111111

原码,反码,补码详解及 Java中&gt;&gt;和&gt;&gt;&gt;的区别

前两天分析 HashMap 的 hash 算法的时候,遇见了 >> 和 >>> 这两个符号,当时查了下资料,在脑子中过了一下.今天又碰到了,没想到竟然忘了  0-0........ 我这记忆力哎,不说了.只好做个笔记,提醒自己,遇到啥不会的最好记下来,好记性不如烂博客啊~ 既然涉及到位运算,我们追本索源,就先从最基础的原码,补码和反码学起.搜了一下这方面的资料,发现一篇专门介绍这方面的文章,写的很是透彻,便直接引用过来了,原文地址是:http://www.cnblogs.co

02进制_原码反码补码

###02.03_Java语言基础(不同进制数据的表现形式)(掌握)* A:二进制的数据表现形式 * 由0,1组成.以0b(b可以大写也可以小写)开头(JDK1.7版本可以表示二进制了)* B:八进制的数据表现形式 * 由0,1,-7组成.以0开头* C:十进制的数据表现形式 * 由0,1,-9组成.整数默认是十进制的 * D:十六进制的数据表现形式 * 由0,1,-9,a,b,c,d,e,f(大小写均可).以0x开头 * E:案例演示 * 输出不同进制表现100的数据. * 0b100 * 0

计算机基础知识_原码反码补码

一.原码,反码,补码 1.原码 比如一个二进制数字 最高位是0,(0代表正数) 0010 1000 那么原码就是0010 1000 反码: 0010 1000 补码: 0010 1000 都是一样的,这个二进制数字的10进制是40 所以是正数 正数的原反补都是一样的 2.反码 反码就是原码的取反,二进制的 0变为1 1变为0 ,看最高符号位是0 还是1,如果是1,则你要0变为1,1变为0, 3.补码: 负数的的是原码 取反 在加1 变成补码(二进制数) 正数的原码 加上负数的补码就等于是做减法运

原码, 反码, 补码 详解

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计

[转]原码, 反码, 补码 详解 很全

本篇文章讲解了计算机的原码, 反码和补码. 并且进行了深入探求了为何要使用反码和补码, 以及更进一步的论证了为何可以用反码, 补码的加法计算原码的减法. 论证部分如有不对的地方请各位牛人帮忙指正! 希望本文对大家学习计算机基础有所帮助! 一. 机器数和真值 在学习原码, 反码和补码之前, 需要先了解机器数和真值的概念. 1.机器数 一个数在计算机中的二进制表示形式,  叫做这个数的机器数.机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1. 比如,十进制中的数 +3 ,计