Здесь нужно рассмотреть несколько слоев:
В электронной парадигме все является проводом.
Один провод представляет один бит.
0 - НИЗКОЕ напряжение, 1 - это
Высокое напряжение. Напряжения могут быть [0,5], [-3.3, 3], [-5, 5], [0, 1.3]
,
и т.д. Главное, что есть только два уровня напряжения, которые контролируют
действие транзисторов.
Байт - это набор проводов (если быть точным, он, вероятно, собран в наборе триггеров, называемых регистрами, но давайте пока оставим его как «провода»).
Бит равен 0 или 1.
Байт - в современных системах - 8 бит. Древние системы могли иметь 10-битные байты или другие размеры; они не существуют сегодня.
A nybble - 4 бита; полбайта.
Шестнадцатеричное является эффективным представлением 8 бит. Например: F
отображается на 1111 1111
. Это более эффективно, чем писать 15. Кроме того, совершенно ясно, если вы записываете несколько байтовых значений: FF однозначен; 1515 можно прочитать несколькими разными способами.
Исторически восьмеричное также использовалось (база 8). Тем не менее, единственное место, где я встретился, это в разрешениях Unix.
Поскольку на электронном уровне наиболее эффективно собирать память
в группах по 2 ^ n hex является естественным обозначением для представления
объем памяти. Кроме того, если вы работаете на уровне водителя, вы можете
необходимо специально контролировать данный бит, который потребует использования
операторов битового уровня. Ясно, какие байты на HI, если вы говорите
F & outputByte
чем 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.