2

需要复习一下位/字节、十六进制表示法以及它与编程的关系(首选 C#)。

寻找一个好的阅读清单(最好是在线)。

4

4 回答 4

2

这里有几个层次需要考虑:

  • 电子的

在电子范式中,一切都是电线。

一根线代表一个比特。

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 & outputBytethan ,则很明显哪些字节在 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.
于 2009-07-15T00:05:22.673 回答
0

一位是 1 或 0。

一个字节是 8 位。

十六进制中的每个字符都是 4 位,表示为 0-F

  • 0000 是 0
  • 0001 是 1
  • 0010 是 2
  • 0011 是 3
  • ...
  • 1110是E
  • 1111是F

这里有一个很好的关于 C# 的位咀嚼操作的介绍

于 2008-10-15T21:10:25.437 回答
0

这是一些基本阅读: http: //www.learn-c.com/data_lines.htm

位和字节几乎与 C# 无关,因为 CLR 自己处理内存。框架中也有处理十六进制表示法和所有这些东西的类和方法。但是,它仍然是一个有趣的阅读。

于 2008-10-15T21:13:17.677 回答
0

编写出色的代码是关于这个主题的一个很好的入门书……将你从裸机带到更高阶的语言。

于 2008-10-15T21:57:02.130 回答