计算机机器码

常见机器码

原码

十进制转换成二进制之后的数值,加上0正1负的符号位

反码

正数的反码是原码本身,负数的反码是数值位按位非

补码

正数的补码是原码本身,负数的补码是反码+1

移码

将符号位取反的补码(不区分正负)

数值的机器码值

机器码的设计

(此处不讨论移码)
假定现有一个单次最高可处理4位二进制的系统,若只处理正数,那其能处理的数值范围0-15。
现有负数需求,将最高位设定为符号位,设定符号位后,能够存储的正数数值范围要砍对半。
故而需要在十进制转换的二进制数基础之上,进一步设计完善,来保障储存正数与负数。
按照习惯,现在约定俗成原有前半部分的正数数值保持不变,
后半部分的数值来存储负数部分,这也是为什么机器码中是0表示正数,1表示负数的原因。
负数的存储有多种方案可采用,也就是原码、反码、补码。

各数值对应机器码值如下:

计算机机器码20230223171340

由图可知,正数的原码,反码,补码都全部相同,都是数值对应的实际的二进制。

计算机天选机器码

先说结论:
补码是最优的储存方式,计算机中所有数都是以补码形式存储的。

当计算机进行数值计算时,首先要将十进制转换为机器码。
回到上图的轮盘,
假定当前位置在原点0处为起点,要跑到11的位置,可以前进11步,也可以后退5步。

+11 == -5

满足条件的只有补码。
上面的一个轮盘就是一个模为16的计量系统,不同位数的二进制系统的模为$2^n$。
按照补码的设计,计算机在实际计算负数时就非常方便,
如上要获取-5的补码,直接求11的补码,即直接获取11的二进制。
又比如,在8位二进制计量系统中,求-5的补码,即求$256 - 5 = 251$的二进制,即为11111011。
对应到实际计量系统,直接用计量系统的模减去负数的绝对值即可。

计算机使用补码,可以统一将符号位和数值位处理而不用特殊对待最高位的符号位;
在进行加减运算时统一看做加法处理。
在现实生活中,时钟就是一个以12位模的计量系统。

模与同余定理

两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对于模m同余或a同余于b模m。
记作:$a≡b (mod\space m)$,
读作:a同余于b模m,或读作a与b对模m同余,例如26≡2(mod 12)。

大白话就是a和b在分成m份的圈里处于同一位置。

BMW WARNING

  • Bulletin

本文首发于 skyline.show 欢迎访问。
文章实时更新,如果有什么错误或不严谨之处望请指出,十分感谢。
如果你觉得有用,欢迎到Github仓库点亮⭐️

I am a bucolic migant worker but I never walk backwards.

  • Material

参考资料如下列出,部分引用可能遗漏或不可考,侵删。

https://baike.baidu.com/item/%E5%90%8C%E4%BD%99%E5%AE%9A%E7%90%86/1212360

  • Warrant

本文作者: Skyline(lty)

文章链接:http://www.skyline.show/计算机机器码.html

授权声明: 本博客所有文章除特别声明外, 均采用 CC BY - NC - SA 3.0 协议。 转载请注明出处!

Copyright © 2017 - 2024 鹧鸪天 All Rights Reserved.

skyline 保留所有权利