正整数十进制转二进制
十进制数字5转二进制是00000101,十进制数字5除以2,取模,商如果大于2继续除以2取模,直到商小于2,最后把余数按倒序串联起来就是该十进制正整数的二进制, 计算机内部表示数的字节单位是定长的,如8位,16位,或32位。所以,位数不够时,高位补零
42-》010101-》00101010
正整数二进制转十进制
先用0进行二进制数字的补位,从二进制数字非零首位开始,乘2加二进制数字下一位继续乘2,直到加乘到二进制数字末位,最后的一次加,所得到的值就是该二进制正整数的十进制,注意首位如果是0就代表是正整数,如果首位是1则代表是负整数(可以忽略补位,需要先取反再换算)。
在这里说一下mysql的tinyint最大范围-127到+128的由来,+128的二进制数字是10000000,计算机底层的存储机制是字节,也就是最小存储单位,一个字节对应8bit,bit是什么呢,在我理解就是01代码的长度,每一个01都是1bit,也就是一个长度,那好8比特对应的刚好是数字10000000的长度,也就是一个字节对应10000000的十进制数字+128的长度,也就是说mysql的tinyint计算机限制的是1字节,至此结束
负整数十进制转2进制
十进制数字-5转二进制是00000101,十进制数字-5转正整数,转二进制,取反,+1,注意是二进制+1
负整数-5-》5-》00000101-》11111010-》11111011
负整数-42-》42-》00101010-》1010101-》11010110
-127=》127-》01111111-》10000000-》10000001
-128-》128-》10000000-》01111111-》10000000结果会和+128重合,简单来说就是如果超过-127计算机就没法区分正负了
原文链接https://jingyan.baidu.com/article/597a0643614568312b5243c0.html
+129一定会和-127重合的
附上ASCII表,是不是好像明白了什么,没错啊,A是可以和整数求值的,也是定义char a='A',只占一个字节的根本原因
再继续深入一下,UTF-8汉字转ASCII, \u4e00-\u9fa5可以继续转二进制,从而得知每一个汉字所占的字节长度,再去计算mysql的存储类型
ASCII
网友评论