听课笔记——《二进制入门》

一、二进制规则

1. 逢二进一

一位数字中只有0和1两种可能。

2. 尾数为0是偶数(even);尾数为1是奇数(odd)

大于一位二进制数减去其末位上的数字后必然是2的乘方或2的乘方和,可以被2整除,所以必然是一个偶数。加上末位上的数字后,若末位数字是1,则该数为偶数加1为偶数加1,为奇数;若末位数字是0,则结果不变,为偶数。
我觉得类似于十进制中,大于一位的十进制数减去其末位上的数后为10的乘方或10的乘方和。因此,若末位数字为0,则该数能被10整除(是10的整数倍);反之,若末位数字非0,则不能被10整除。

3. 任意一个二进制数尾部添一个0,结果等于原数乘二

二进制数额外添加一个末位数字0,我觉得相当于其每一个数位上的数值不变但都往左移了一位,所以每一位所表示的数值都是之前的两倍,最后整个二进制数也变为原来的两倍。
类似于十进制中,任意十进制数字额外在末位添加一个0,结果等于原数乘十(相当于每一位数所表示的数值都是原来的十倍)。

4. 任意一个二进制数 100…0(i个0) = 2i(2的i次幂); 11…1(i个1) = 100…0(i个0) - 1 = 2i - 1

另:210 = 1024

二、课堂练习

1) 1 + 2 + 22 + 23 + … + 210

法一:等比数列求和公式
法二:原式 = 1(2) + 10(2) + 100(2) + 1000(3) + … + 100…0(10个0) = 111…1(10个1) = 100…0(11个0) - 1 = 211 - 1 = 2048 - 1 = 2047

2) 十进制转二进制

假设一个十进制数为D
第一步:可以知道D如果表达为二进制最后一个比特的数值(偶数是0,否则为1)
第二部:处理剩下的数位,去掉最后一个比特(右移一位,相当于D整除2),然后重复第一步(递归调用)

// 以下是使用c++的实现,其中我用字符串来表示目标二进制数,只能处理0和正整数
string Dec2Bin(int d)	// 需要使用到string类
{
   
    string b{
   };
    if (d <=1) {
   	// 递归调用结束条件
        if (d) {
   
            return "1";
        } else {
   	// 处理d原本为0的情况
            return "0";
        }
    }
    b = Dec2Bin(d >> 1);	// 记录d向右移一位(除以二)后作为参数递归调用函数的返回值
    if (d % 2) {
   	// 将此次递归调用的结果(0或1)连接到字符串末位
        return b + "1";
    } else {
   
        return b + "0";
    }
    return b;
}

另记(位操作):
~:按位取反
&:按位与,同时为一结果才是1,否则结果为0
^:按位异或,不同为1,相同为0
|:只要有至少一个1结果就是1,否则结果为0

3) 不使用"+"实现整数加法

// c/c++函数实现
int myAdd(int a, int b)
{
   
	if
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值