文章目录

  • 程序员的数学基础课
    • 1、左移
    • 2、右移
      • 算数右移:
      • 逻辑右移:
    • 3、或
    • 4、与
    • 5、异或
    • 小结:

程序员的数学基础课

基础思想一知识点:

1、明白2进制对于电脑的意义,首先请回答这个问题(菜鸟在以前学计算机组成原理时就已经回答了这个问题)
计算机为什么使用二进制?而不是十进制?
这里就直接引用极客时间的老师的话了:

我觉得,计算机使用二进制和现代计算机系统的硬件实现有关。组成计算机系统的逻辑电路通常只有两个状态,即开关的接通与断开。

断开的状态我们用“0”来表示,接通的状态用“1”来表示。由于每位数据只有断开与接通两种状态,所以即便系统受到一定程度的干扰时,它仍然能够可靠地分辨出数字是“0”还是“1”。因此,在具体的系统实现中,二进制的数据表达具有抗干扰能力强、可靠性高的优点。

相比之下,如果用十进制设计具有 10 种状态的电路,情况就会非常复杂,判断状态的时候出错的几率就会大大提高。

另外,二进制也非常适合逻辑运算。逻辑运算中的“真”和“假”,正好与二进制的“0”和“1”两个数字相对应。逻辑运算中的加法(“或”运算)、乘法(“与”运算)以及否定(“非”运算)都可以通过“0”和“1”的加法、乘法和减法来实现。

菜鸟刚准备写,不过感觉除了测试需要用到java代码,其它的都是计算机组成原理里面的东西,什么左移、右移、或、与、异或,这里就不给大家看代码了,直接上结论:

1、左移

(没有溢出时)相当于将数字翻倍

2、右移

二进制右移一位,就是将数字除以 2 并求整数商的操作(对于正数是的,对于负数的是算数右移才行)

这里分为算数右移和逻辑右移:

算数右移:

逻辑右移:


注意

这里学过计算机组成原理的同学都知道,负数也就是符号位为1的,在计算机中以补码形式存储,而这里举的例子就是用的补码,毕竟正数也没什么好说的,补不补都是0。

这里有的同学会问:为什么没有算数左移和逻辑左移?

由于左移位无需考虑高位补 1 还是补 0(符号位可能为 1 或 0),所以不需要区分逻辑左移和算术左移。

注意
逻辑右移Java 和 Python 语言中使用 >>> 表示,而算术右移使用 >> 表示。如果你有兴趣,可以自己编码尝试一下,看看这两种操作符输出的结果有何不同。

在 C 或 C++ 语言中,逻辑右移和算数右移共享同一个运算符 >>。那么,编译器是如何决定使用逻辑右移还是算数右移呢?答案是,取决于运算数的类型。如果运算数类型是unsigned,则采用逻辑右移;而是 signed,则采用算数右移。如果你针对 unsigned 类型的数据使用算数右移,或者针对 signed 类型的数据使用逻辑右移,那么你首先需要进行类型的转换。

3、或


相当于c语言、js里面的“ || ”(如果没学过这些的读者,那就记下来:同时为0时,或才能为0,否者都是1)

4、与


相当于c语言、js里面的“ && ”(如果没学过这些的读者,那就记下来:同时为1时,与才能为1,否者都是0)

5、异或


异或就是相异为1,相同为0(这里,有异或自然有同或,而同或正好与异或相反,相异为0,相同为1)

小结:

(这里附上极客时间的小结,感觉这个小结还不错,告诉了我们为什么学二进制,只为更好的服务各位读者朋友,我只会取其精华去其糟粕)

今天我们聊了二进制,你可能会问:学习二进制究竟有什么用呢?平时的编程中,我们好像并没有使用相关的知识啊?确实,目前的高级语言可以帮助我们将人类的思维逻辑转换为使用 0 和 1 的机器语言,我们不用再为此操心了。但是,二进制作为现代计算机体系的基石,这些基础的概念和操作,你一定要非常了解。

二进制贯穿在很多常用的概念和思想中,例如逻辑判断、二分法、二叉树等等。逻辑判断中的真假值就是用二进制的 1 和 0 来表示的;二分法和二叉树都是把要处理的问题一分为二,正好也可以通过二进制的 1 和 0 来表示。因此,理解了二进制,你就能更加容易地理解很多计算机的数据结构和算法,也为我们后面的学习打下基础。

程序员的数学基础课 二进制(自我提升第6天)相关推荐

  1. 程序员的数学基础课之二进制

    本内容来自极客时间 程序员的数学基础课 文末黄申老师总结的笔记 什么是二进制? 十进制计数使用 10 作为基数,二进制使用 2 作为基数,二进制的数位就是 2^n 的形式. 计算机为什么使用二进制? ...

  2. 【程序员的数学基础课-黄申】学习笔记 1-10

    博客内容来自--极客学园>程序员的数学基础课 现在数学在程序员的日常里重要性逐渐显现,但作者不建议去啃大学课本,可以先广度再深度. 作者每节课都用心总结截图如下,建议购买课程更新学习 01讲二进 ...

  3. 极客时间程序员的数学基础课_针对程序员和极客的10个很棒的礼物创意

    极客时间程序员的数学基础课 假期给程序员朋友和家人的一些礼物提示以及购买链接. 照片由freestocks.org在Unsplash上拍摄 大家好,又是一年中的某个时候,我们喜欢与家人和朋友共度时光, ...

  4. 程序员的数学基础课 数学归纳法(自我提升第二十一天)

    这里解释一下为什么一天发的,但是却是一个二十,一个二十一,因为上一篇是我昨天写一半,得睡觉了,所以今天写完才发的. 菜鸟已经感觉手指扛不住了,所以更新完这篇得休息了,读者谅解,话不多说,冲冲冲 文章目 ...

  5. jsp标签 判断 余数_程序员的数学基础课(三)余数与迭代法

    问题:什么是余数 余数的作用? 余数在生活中非常常见,日历,日期,其中包含一个定理 同余定理. 同余定理:余数总是在一个固定的范围内,任意两个整数 a 和 b,如果它们除以正整数 m 得到的余数相等, ...

  6. 【程序员的数学基础课-黄申】学习笔记 11-20

    11讲树的深度优先搜索(上):如何才能高效率地查字典 树的组成和深度遍历方式 12讲树的深度优先搜索(下):如何才能高效率地查字典 配合栈进行遍历,大大节省内存 13讲树的广度优先搜索(上):人际关系 ...

  7. 程序员学数学读哪本书?(文末抽奖赠书)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在互联网一直流传了一个这样的段子-- "一流程序员靠数学 ...

  8. 程序员学数学读哪本书?(文末赠送精美礼品)

    关注我们丨文末赠书 在互联网一直流传了一个这样的段子-- "一流程序员靠数学,二流靠算法,三流靠逻辑,四流靠SDK,五流靠Google和StackOverFlow,六流靠百度和CSDN.低端 ...

  9. 程序员的数学笔记1--进制转换

    最近在学习极客时间的课程–程序员的数学基础课. 课程地址:https://time.geekbang.org/column/intro/143 这是第一节课程的学习笔记–有关进制的转换. 二进制 什么 ...

最新文章

  1. 批处理获取目录下所有文件名
  2. KafkaProducer初始化时,是否会拉取集群元数据?
  3. 实验 3 检查点和参数化实验报告--软件功能测试与性能测试实验
  4. python3.0什么时候发布的_Django 3.0 发布说明
  5. linux不适合数据传输,【Linux调试经验】局域网内数据传输不经过路由
  6. 第四章 虚拟机的安装和使用
  7. Deepin 下安装 LAMP
  8. 会话管理 轻量php框架_SpringSecurity+JWT权限管理训练营-1基于RBAC模型的权限管理系统...
  9. 【金融工程实验】【matlab】使用candle函数画日均k线图
  10. python获取本地时间并向服务器发送udp报文_python3通过udp实现组播数据的发送和接收操作...
  11. CCNA学习指南 第五章 下载
  12. 如何从0开始编写一个网络爬虫?
  13. 徐思/杨玲《面向对象程序设计(Java)》第十一周学习总结
  14. 二项分布与伯努利试验的关系,看图说话
  15. 银行利率bps是什么意思,贷款利率bps是什么意思
  16. 重磅!!毕业将近,论文免费查重工具任你选,非常值得收藏!
  17. 全国增值税发票查验平台验证码识别
  18. 微信SVG使用指南 01
  19. 2022-2028全球多层共烧基板行业调研及趋势分析报告
  20. 艾伦·凯与Smalltalk语言

热门文章

  1. MySQL · 捉虫动态 · UK 包含 NULL 值备库延迟分析
  2. java中long比较大小_java中Long类型比较大小和long类型的比较大小java中Long类型比较大小和long类型的比较大小...
  3. BufferQueue 学习总结(内附动态图)
  4. sql语句里面最难的not exists,exists,口语化解释(个人笔记)
  5. 局域网使用kubeadm安装高可用k8s集群
  6. 产品经理如何了解高深莫测的大数据?
  7. Makefile-引用其它的Makefile
  8. 【思想感悟】拨开云雾见天日
  9. 使用YOLOv5训练NEU-DET数据集
  10. lottie android 源码,Lottie动画库 Android 端源码浅析