关于计算机编码、原码, 反码, 补码的简单学习笔记
学习文章:
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