关于计算机编码、原码, 反码, 补码的简单学习笔记

学习文章:

https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/computercode.html

https://baike.baidu.com/item/%E8%A1%A5%E7%A0%81

总结:

原码 反码 补码都是标识机器数的一种方式;

1、机器数就是一种二进制数 - 机器标识数字用的一种二进制数,这个机器数有一个特点吗,就是第一位是符号位,1标识为负数,0标识为正数;

2、真值就是真正的数值,比如机器数的开头是1代表负数,而对于真值则 -1 就是真值,机器码100 0001 并不是真值;

3、有原码就行了为什么还要有反码和补码呢?其实只是为了方便机器计算数值而已,延伸了 "模"的概念;具体反码、补码的计算直接按公式就行,如何实现了让机器可以只有加的方式实现了二进制数的减法,可以好好理解一下;

延伸:

可以理解为啥 tinyint 和 unsigned tinyint 的数值范围是 -127 ~ +127 和 255;

 一个字节等于8个二进制数字:

最大的话就是

 

 

按照转换,1个字节最大可以标识10进制之中的数字为255

而 tinyint 如果是 unsign 那么最大存储值为 255

 

 关于ASCII码

https://baike.baidu.com/item/ASCII/309296

在美国人刚刚发明计算机的时候,他们使用 二进制数 用来表示他们能用到的所有字符(英文字母大小写、逗号、分号、感叹号等)

一共加起来是 128 个字符 ( 包含了 33 个控制字符(具有某些特殊功能但是无法显示的字符)和 95 个可显示字符 ) 

他们认定 8个二进制数字表示 1个字节;

随着文字的扩充,逐渐发现还有其他更多的字符需要表示,比如 罗马数字、中文等,各个二进制数字 与文字的映射表也变大,字节扩大,中文需要好几个字节映射

不同的编码表相当于是不同的 二进制数 和 文字的 映射表

如下图,不同的编码形式对应的二进制数字是不同的,其中 gbk 是某一个机构定的,后来被国际通用的是 Unicode编码,Unicode编码表是通用的(而utf8和utf16是其不同的实现方式)

 

 https://www.qqxiuzi.cn/bianma/zifuji.php

 

 

 

 

 

posted @ 2021-05-06 17:15  许伟强  阅读(137)  评论(0编辑  收藏  举报