二进制相关知识

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38621214/article/details/88843916

1、二进制和其它进制的简单介绍

(1)十进制

不同位的数字代表10的不同次幂,小数点左侧的数字为0次,向左一次增加,向右依次减小。例如:

299.792=2\times 10^{2}+9\times 10^{1}+9\times 10^{0}+7\times 10^{-1}+9\times 10^{-2}+2\times 10^{-3}

(2)二进制

例子:

(11001.011)_{2}=2^{4}+2^{3}+2^{0}+2^{-2}+2^{-3}=25.375

其中括号右下角的“2”表示括号内是二进制数,与十进制做区分。

(3)十六进制

可以使用阿拉伯数字0-9和拉丁字母的a-f表达十六进制。

例如:

(a05.9f)_{16}=10\times16^{2}+5\times16^{1}+9\times16^{-1}+15\times16^{-2}=2565.62109375

注意:1、三者都可以有负数,原则和非负数一样,只是前面有负数符号“-”。

2、因为一定范围的二进制数书写起来很长,而十六进制与二进制的转换很方便(2^{4}=16,四位二进制数正好对应一位十六进制),所以在数字电路和计算机专业中,常常书写十六进制而不是二进制。

2、进制之间相互转换

(1)二进制转十进制、十六进制转十进制参考第一部分的内容。

(2)十进制转二进制

十进制向二进制的转换可分为整数部分和小数部分分别进行,整数部分使用短除法,小数部分使用短乘法。比如25.375,其整数部分是25:

每次的余数写在短除式的右侧,最后将所有的余数自下而上组合得到“10011”,即为25的二进制表达。

25.375的小数部分是0.375:

每次乘法只对小数部分做,直到小数部分为0,或达到所需要的精度(因为常常乘不尽),最后将进位得到的所有整数部分自上而下得到“.011”即是0.375的二进制表达。所以25.375=0b11001.011

(3)二进制转十六进制,十六进制转二进制

将二进制转换为十六进制只需要从小数点向左和向右每四位一节。

例如:0b10,1101,0100.1010,1=0x2d4.a8

0x5.c=0b101.11

(4)十进制转十六进制

仿照与二进制相互转换的短除法和短乘法。

展开阅读全文

字符编码的相关知识联想到本地二进制代码困惑

03-25

最近在看字符编码的相关知识,又联想到二进制代码的知识,由于本人不是科班出身,对一些二进制代码即本地代码了解不深,所以有几个问题感到很困惑,所以希望懂相关知识的人帮我顺一顺。rnVS默认是将文本本件(包括cs文件)以utf-8编码方案编码成字节的,举个例子rnrn我们AaBb经过utf-8编码后是E6 88 91 E4 BB AC 41 61 42 62rnE6 88 91(代表我) E4 BB AC(代表们) 41(A) 61(a) 42(B) 62(b)rnrn[color=#FF0000]第一个问题:[/color]我是不是可以认为将这些16进制转换成2进制后就是 我们AaBb 在计算机的存储方式? 如下rn11100110 10001000 10010001(代表我) 11100100 10111011 10101100(代表们) 1000001(A) 1100001(b) 1000010(B) 1100010(b)rnrn如果换成是utf-16编码的 Little_Edian方式(每个字符占2个字节) 就是rn11 62(代表我) EC 4E(代表们) 41 00(A) 61 00(a) 42 00(B) 62 00(b)rnrn既然说到了2进制,我就想起了本地代码,从开始学语言的时候就看到各种各样的人说机器语言是01010这种2进制云云...rn那么对于C# java先看一下下面rn源代码 C#,javarn ↓rn托管代码 .NET:IL(中间语言) JAVA:字节码等rn ↓rn非托管代码(本地代码,二进制代码,机器语言)http://baike.baidu.com/view/2418160.htmrnrn首先看源代码,如果我们只是保存它们,当然就是像上面那样用某种编码方式将其保存成字节rn[color=#FF0000]第2个问题:[/color]如果我们对源代码进行了编译,使其变成了托管代码,windows下的托管代码叫做可移植执行体,那么这些托管代码肯定也是以2进制形式存储在硬盘里,那么这时的我们编译得来2进制形式与我们直接保存得来的2进制形式的区别在哪里?rnrn[color=#FF0000]第3个问题:[/color]当将托管代码编译成本地代码后,啊哈,这就是人们常说的本地2进制代码,这些本地2进制代码与之前的托管2进制代码的区别在哪里? 我知道后者要依赖CLR或jvm,但除此之外呢?rnrn看了上面的提问,感觉我要问的好像是编译的得到的2进制代码与编码得到的2进制代码有什么区别,然后是编译源代码得到的2进制代码与编译托管代码得到的2进制代码有什么区别。rnrn[color=#FF0000]第4个问题:[/color]既然编码字符需要考虑编码方案的问题,那么图片视频呢? 就拿.net中socket传输字符串来讲也是需要考虑编码方案的,为什么传输图片就不需要考虑编码呢? 图片不是也有jpg gif等好多格式吗? 论坛

没有更多推荐了,返回首页