聊聊1+1背后的位运算知识
通过1+1了解计算机是如何运算的,得到的结果是什么?
说在前面
电子计算机是只认识0和1的(逻辑电路的断开和接通),也就是“二进制”。
大学期间所有的计算机相关专业都应该学过二级制,简单的说:二进制:二进一。
ps:十六进制:十六进一(简化版二进制),在计算机内存地址中我们经常所见到的也就是十六进制。
基本知识
宽度:位。 (bit,Byte=>1Byte = 8bit,Word = 16bit,DWord = 32bit)
符号位:1表示负数,0表示正数
原码:最高位符号位,对其取本身的绝对值
反码:正数=>反码与原码相同,负数=>符号位不变,其余位对源码取反
补码:正数=>补码与原码相同,负数=>符号位不变,其余位对源码取反后 +1(反码+1)
基本运算
与运输(and &):两个都为1即为1
或运输(or |):1个为1即为1
异或运算(xor ^):相同为0不同为1
非运算(not ~) :单目运算,取反。0为1,1为0
左移(shl <<):高位丢低位补
右移(shr >>):低位丢高位补(取决于符号位: 正数左补0,负数左补1 )
计算机1+1
首先要知道,计算机运算的时候, 都是以补码的方式来运算的。
1+1:
0000 0001
0000 0001
--------------
0000 0010
计算机:
1.异或运算: // 如果没有进位的话,拿就是结果:0000 0010 + 0000 0001 = 0000 0010
0000 0001
0000 0001
--------------
0000 0000
2.与运算 << 1: // 判断是否有进位
0000 0001
0000 0001
--------------
0000 0001
3.异或运算: // 拿“进位”结果与“异或结果”
0000 0000
0000 0010
--------------
0000 0010
4.确认:直到与运算结果为0,得到结果=>最后一次异或运算的结果
趣味思考
计算机有减法、乘法、除法吗,又是如何计算的呢?
有人说 1+1 = 3,ok吗?能否举证 1+1 <> 2 ?
本作品采用《CC 协议》,转载必须注明作者和本文链接