需要复习一下位/字节、十六进制表示法以及它与编程的关系(首选 C#)。
寻找一个好的阅读清单(最好是在线)。
这里有几个层次需要考虑:
在电子范式中,一切都是电线。
一根线代表一个比特。
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
than ,则很明显哪些字节在 HI 上15 & outputByte
。
一般来说,许多现代编程不需要关注二进制和十六进制。然而,如果你在一个你需要知道它的地方,就不会溜走——那时你真的需要知道它。
需要二进制知识的特定领域包括:嵌入式系统、驱动程序编写、操作系统编写、网络协议和压缩算法。
虽然您想要 C#,但 C# 确实不是位级操作的正确语言。传统上,C 和 C++ 是用于位工作的语言。Erlang 使用位操作,Perl 也支持它。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.
一位是 1 或 0。
一个字节是 8 位。
十六进制中的每个字符都是 4 位,表示为 0-F
这里有一个很好的关于 C# 的位咀嚼操作的介绍
这是一些基本阅读: http: //www.learn-c.com/data_lines.htm
位和字节几乎与 C# 无关,因为 CLR 自己处理内存。框架中也有处理十六进制表示法和所有这些东西的类和方法。但是,它仍然是一个有趣的阅读。
编写出色的代码是关于这个主题的一个很好的入门书……将你从裸机带到更高阶的语言。