【二进制】(计算机)基础知识

本文详细介绍了计算机中的原码、反码和补码表示法,位运算(与、或、异或、非、左移、右移)的使用,并通过实例展示了加法和减法的补码运算过程。此外,还解释了32位系统中4GB内存限制的来源,即2^32个内存地址对应4GB的存储容量。
摘要由CSDN通过智能技术生成

1. 原码、反码、补码

最高位是符号位,0表示正数,1表示负数

1  -1, 8位
原码		1000  0001
反码     1111  1110
补码     1111  11112  -7, 8位
原码		1000  0111
反码 	1111  1000
补码    	1111  1001

2. 位运算

  • 与(and &)
	0011  0101
&	0001  0111
---------------
	0001  0101
  • 或(or |)
	0011  0101
|	0001  0111
---------------
	0011  0111
  • 异或(xor ^)
	0011  0101
^	0001  0111
---------------
	0010  0010
  • 非(not ~)
~	0001  0111
---------------
	1110  1000
  • 左移(shl <<)
<< 1	0001  0111
-------------------
		0010  1110
  • 右移(shr >>)
>> 1	0001  0111
-------------------
		0000  1011

3. 加减乘除

加法

计算: 0011 0101 + 0001 0111

  1. 异或
	0011  0101
^	0001  0111
---------------
	0010  0010
	0011  0101
&	0001  0111
---------------
	0001  0101
  1. 左移
0001  0101 << 1 = 0010  1010
  1. 异或
	0010  0010
^	0010  1010
---------------
	0000  1000
  1. 与 + 左移
	0010  0010
&	0010  1010
---------------
	0010  0010
<<			 1
---------------
 	0100  0100
  1. 异或
	0000  1000
^	0100  0100
---------------
	0100  1100
  1. 与(无进位,结束)
	0000  1000
^	0100  0100
---------------
	0000  0000
  1. 检查
	0011  0101  =  53 
+	0001  0111  =  23
---------------------
	0100  1100  =  76  

LeetCode习题

// c++负数不支持左移
class Solution {
public:
    int add(int a, int b) {
        // 异或 与 判断进位 左移 
        unsigned XOR = a ^ b, AND = a & b;
        while (AND != 0) {
            a = XOR;
            b = AND << 1;
            XOR = a ^ b;
            AND = a & b;
        }
        return XOR; 
    }
};

减法

计算: 0011 0101 - 0001 0111

  1. 写出补码
	 0001 0111
(原码)1001 0111
(反码)1110 1000
(补码)1110 1001
  1. 异或
	0011  0101
^	1110  1001
---------------
	1101  1100
  1. 与 + 左移
	0011  0101
&	1110  1001
---------------
	0010  0001
<<           1
---------------
	0100  0010
  1. 异或
	1101  1100
^	0100  0010
---------------
	1001  1110
  1. 与 + 左移
	1101  1100
&	0100  0010
---------------
	0100  0000
<<           1
---------------
	1000  0000
  1. 异或
	1001  1110
^	1000  0000
---------------
	0001  1110
  1. 与 + 左移(无进位,结束)
	1001  1110
&	1000  0000
---------------
	1000  0000
<<           1
---------------
	0000  0000
  1. 检查
	0011  0101  =  53 
-	0001  0111  =  23
---------------------
	0001  1110  =  30 

4. 32位4GB内存的由来

存储数据: 寄存器 > 内存 > 硬盘
1 bit = 0, 1
1 Byte = 8 bit
1 KB = 1024 Byte
1 MB = 1024 KB
1 GB = 1024 MB

4 GB = 4 * 1024 MB
     = 4 * 1024 * 1024 KB
     = 4 * 1024 * 1024 * 1024 Byte
     = 4 * 1024 * 1024 * 1024 * 8 bit
     = 2 ^ 32 * 8 bit

一个内存地址是8bit,共有232个内存地址。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值