需要复习一下位/字节、十六进制符号以及它与编程的关系(C#优先)。
寻找一个好的阅读清单(最好是在线的)。
发布于 2009-07-15 00:05:23
这里有几个层次需要考虑:
在电子范式中,一切都是一根电线。
一根导线代表一个比特。
0为低电压,1为高压。电压可以是[0,5], [-3.3, 3], [-5, 5], [0, 1.3]等。关键是只有两个电压电平来控制晶体管的动作。
一个字节是一个连接的集合(准确地说,它可能被收集在一组称为寄存器的触发器中,但现在让我们将其保留为“连接”)。
位是0或1。
在现代系统中,一个字节是8位。古老的系统可能有10位字节或其他大小;它们现在已经不存在了。
一个nybble是4位;半个字节。
十六进制是8位的有效表示。例如:f映射到1111 1111。这比写15更有效。另外,如果你写下多个字节值,这是非常清楚的: FF是明确的;1515可以用几种不同的方式读取。
在历史上,八进制也被使用(以8为基数)。然而,我遇到它的唯一地方是在Unix权限中。
由于在电子层上,以2^n为一组收集内存是最有效的,因此十六进制是表示内存的自然表示法。此外,如果您碰巧在驱动程序级别工作,则可能需要专门控制给定位,这将需要使用位级运算符。如果你说的是F & outputByte而不是15 & outputByte,那么HI上的字节是很清楚的。
一般来说,许多现代编程不需要关注二进制和十六进制。然而,如果你在一个你需要知道它的地方,就不会有任何闪失--你真的需要知道它。
需要二进制知识的特殊领域包括:嵌入式系统、驱动程序编写、操作系统编写、网络协议和压缩算法。
虽然您想要的是C#,但C#确实不是用于位级操作的正确语言。传统上,C和C++是用于位工作的语言。Erlang使用位操作,Perl也支持它。VHDL是完全面向位的,但从典型编程的角度来看,使用VHDL相当困难。
下面是一些用于执行不同逻辑操作的示例C代码:
char a, b, c;
c = a ^ b; //XOR
c = a & b; //AND
c = a | b; //OR
c = ~(a & b); //NOT AND(NAND)
c = ~a; //NOT
c = a << 2; //Left shift 2 places
c = a >> 2; //Right shift 2 places.发布于 2008-10-15 21:10:25
位不是1就是0。
一个字节是8位。
十六进制中的每个字符都是4位,表示为0-F
C#的比特吞噬操作here有一个非常好的介绍
发布于 2008-10-15 21:13:18
下面是一些基本的读物:http://www.learn-c.com/data_lines.htm
位和字节几乎从不与C#相关,因为CLR自己处理内存。框架中也有处理十六进制符号和所有这些东西的类和方法。但是,它仍然是一个有趣的阅读。
https://stackoverflow.com/questions/206469
复制相似问题