Asistencia en Proyecto

Cuando declaras una variable en C (en este caso, uint8_t value = 127;), el compilador guarda ese valor en memoria utilizando el sistema binario. Esto significa que, internamente, 127 se almacena como 0b01111111.
Cada operación a nivel de bits utiliza esa representación binaria. Por ejemplo:
  • La operación >> (desplazamiento a la derecha) mueve cada bit a una posición menos significativa.
  • La operación & 0x01 compara (mediante una operación AND) la representación de value (desplazada) con 0x01 (que en binario es 0b00000001). Esto "filtra" y deja solo el estado (1 o 0) del bit menos significativo resultante del desplazamiento.
El compilador conoce la correspondencia porque cada bit en el valor binario tiene un peso definido (el bit0 vale 20\Large 2^0, el bit1 vale 21\Large 2^1, y así sucesivamente). Las operaciones bit a bit se hacen utilizando estas reglas. Por ello, cuando realizas:

C


segments[i] = (value >> i) & 0x01;
estás extrayendo el bit en la posición i del número, que en memoria ya está representado en forma binaria. No es que la operación "sepa" por sí sola qué número es, sino que trabaja directamente con la representación binaria y la semántica de operaciones bit a bit ya definida en el lenguaje C.
Use uint8_t for binary operations
Understand ANDing with 1
Detail on bit manipulations


Devoted Indigo Power Laces

Devoted Indigo Power Laces thumbnail
Welcome to your new project. Imagine what you can build here.

Properties

Properties describe core aspects of the project.

Pricing & Availability

Distributor

Qty 1

Controls