终于踏上了自己独自研究C语言的第一天啦!大家多多指正多多关照噢
先学习一下二进制
二进制到底是什么玩意?
大家都说二进制是机器语言,计算机会知道二进制,计算机是懂二进制的!但是我不懂啊!我不懂为啥计算机知道二进制,我感觉这是很多人了解进制这个东西时候的疑问吧!
“0000 0001” 这玩意就是一个二进制例子,首先这一长串的数字我很确定,计算机确不确定我就不知道了!但是我们人类知道这是二进制。这样看,似乎“二进制”之前还有什么东西需要我们去理解!如果不理解二进制之前的东西,那也没办法理解二进制了!
那就把技术时间线再朝前推一推!
我们把视线从键盘上的010101 转移到现实中的计算机芯片上吧。
芯片:剖析开来,不就是“亿”些晶体管么?晶体管不就是通和断这玩意么?和家里面电灯的开关一模一样的东西!它又是怎么识别这些0000 0001的呢?诚然!计算机芯片还是不识别01这玩意!但是计算机芯片可以通过“通/断”做动作,通和断依靠给电压给电流来完成!
但这个晶体管似乎有点东西!
这么想着,我突然发现,这玩意一点不简单啊!
晶体管有三根金属线......................先去吃饭!下午再说
吃完饭,休息一下!继续肝!
刚才看到了结构体这个东西,不过先说说晶体管
晶体管是什么?不知道,但是原理似乎和电灯泡很像呢!
废话不多说,我来画一个图,大家就都看懂啦!
可以看到左边有一个开关,右边有一个开关!左边的开关在1和2之间选择,而右边的开关在3和4之间选择
那么有几种可能性呢?三种!就是/与/或/非/
左边开关在1位置时 算作“合”,那么我们就把他看成数字1
左边开关在2位置时 算作“离”,那么我们就把他看成数字0
右边开关在3位置时 算作“合”,那么我们就把他看成数字1
右边开关在4位置时 算作“离”,那么我们就把他看成数字0
灯光亮就看作1 灯不亮就看做0
第一种可能:
结果是 左合为1 + 右离为0 = 结果是不亮 0
1+0=0
那么以此为基准推导一下其他可能性吧
第二种可能:
结果是 左离为0+右离为0 = 结果亮了 1
0+0=1
第三种可能:
结果是 左离为0+右合为1 = 结果是不亮 0
0+1=0
第四种可能:左合为1+右合为1 = 结果是亮了 1
1+1=1
总共可以得出来四种结果:
展示如下:1+0=0
0+0=1
0+1=0
1+1=1
可以看出来一些规律了,似乎这个公式里面只要有一个0 那么结果就是0,但是如果两个都是0那么结果竟然是1 !!!!
根据我看到的说法竟然有似乎些许的不同呢?
难道我们研究错了么?似乎并不是这样!参考: 你管这破玩意叫 CPU ?|晶体管|寄存器|加法器|二进制|操作数_网易订阅你管这破玩意叫 CPU ?,晶体管,寄存器,加法器,二进制,操作数https://www.163.com/dy/article/GCJV8HGB0511FQO9.html#post_comment_area 该文章论点为:只要其中一个开关属于"打开"状态,灯就会亮了!
这里的矛盾就出在了"其中一个"开关"打开"状态!并不考虑第二个开关的位置,那么默认第二个开关不动作!所以第一个开关只有打开和关闭!它的前置条件就是操作其中一个开关的时候,另外一个开关不进行动作!原来关键的节点就是这个!
所以我所做的推导没有问题,问题出在了两个开关都按照要求进行动作,才会得出来第二种可能。那么第二种可能中的两个"离",其实应该是两个开关都打开了,似乎有一些朦朦胧胧,又有一些豁然开朗了啦!那么再次分析上面的结果:
0+1=0
1+0=0
0+0=1
1+1=1
在不考虑另外一个开关的情况下(默认不动作),一个开关的动作只有打开和关闭咯!
天哪!我竟然不知道如何解释了!哈哈哈!上图(原文)
待更新中.......................................
大家注意思考一下,我上面的绿色的字!噢 淡绿色的字!
首先不考虑另外一个开关的情况,只有一个开关动作
那么这个开关只有开和闭,只要开就为通,闭为断那么可以得出来一个结论,和我上面以上推测不同的结论:
1/2 1号开关或者2号开关 开关位置置于1为开,置于2为闭
3/4 3号开关或者4号开关 开关位置置于3为开,置于4为闭
条件1:1开 && 3&4不动作 结论:通
条件2:1闭 && 3&4不动作 结论:断
条件3:3开 && 1&2不动作 结论:通
条件4:3闭 && 1&2不动作 结论:断.......待更新有急事
根据上面条件得知 只要满足单独一个开关是处于打开状态的条件下,电路就处于通
那么得出来的结果可以换算出下面这个公式:
1 0 1
0 0 0
1 1 1
1为通 其他不管 结果就是通
0为断 其他不管 结果就是断
两个都为通 结果还是通
那刚好和上面图片的结论是一致的
可以想象得知这种结论似乎就是《与》、《或》、《非》
二极管就是通过与或非的通断来传输电信号,那就算传进了CPU 似乎也没什么用处,大家都知道CPU是用来处理信息,交换信息,处理各种数据,里面包含逻辑?
举个例子,我们现在通过键盘输入“1”“+”“1”那是不是得出来的结果是2?
计算机怎么知道?怎么处理1+1?计算机并不明白1是什么也不会明白“➕”这是什么!
那么可能需要引入一个概念,一套逻辑框架>>>>>【指令集】
个人观点:是否指令集就是一个框架,或者说设定的计算机可以执行基础指令的一个程序,
举例说明:
(假设)指令集规定了 我们人类理解的十进制里面的“1”在我们用键盘键入之后,计算机理解的是0000 0001 这就是转化
(假设)指令集规定了 我们人类理解的十进制里面的“3”在我们用键盘键入之后,计算机理解的是0000 0011 这也是规定好的转化
(假设)指令集规定了 我们人类理解的符号“➕”其实就是10进制的合体,计算机就会把这个符号之前的数字和之后的数字进行合成
0000 0001 1
0000 0011 3
0000 0001 1
0000 0010 2
0000 0011 3
0000 0011 为3 朝前进位后前一位0变1 后面11变0 这似乎就是二极管或者说 这似乎就是与或非门的逻辑
0000 0011 3进行左移 0000 0001位后结果就是结果“与/&”后的结果
0000 0100 4
计算机就合成两个它懂的“二进制”,其实在我看来计算机也不懂这是什么,它仅仅只会“通/断”
合成结果就是“0000 0100 ”这个结果是固定的,是谁固定的?我有理由想象和猜测,大胆猜测一下就是指令集规定了这些。所以这样就会很能理解计算机是如何执行我们输入的一些命令或者数字、符号、字符。指令集做的工作就是转化和固定结果,只有这样才能做出最后的逻辑运算,得出我们想要的答案!
《指令集》是否是规定了或者说指定了1+1在输入之后就变为2?1+2输入就是为3?这是否就是指令集做的事情呢?查阅中.......................