聊聊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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!