Cómo definir MSB o LSB de un número binario

Cómo definir MSB o LSB de un número binario

Tengo una cadena de bits y me gustaría escribir MSB (abreviatura de Bit más significativo) sobre el primer bit y LSB (abreviatura de Bit menos significativo) sobre el último bit. ¿Cómo puedo hacer esto?

ingrese la descripción de la imagen aquí

Respuesta1

Una combinación de \oversety \substackle permite colocar las etiquetas y las flechas encima de los dígitos respectivos. Para asegurarse de que la presencia de las etiquetas no afecte el espaciado de los dígitos, utilice \mathclap. Si tiene muchos casos de este tipo, es útil definir una macro que tome dos argumentos: la etiqueta y el dígito.

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{mathtools} % to access \overset, \substack, \mathclap, and \text macros
\newcommand\bitpos[2]{%
    \overset{\substack{\mathclap{\text{\tiny #1}}\\ \downarrow}}{#2}}
\begin{document}
$\bitpos{MSB}{1}001100\bitpos{LSB}{1}$
\end{document}

Apéndice: El código que se muestra arriba supone que \bitposse utilizará en modo matemático. Si ese no es necesariamente el caso, simplemente proporcione \ensuremath{...}también una instrucción contenedora, es decir, defina \bitposde la siguiente manera:

\newcommand\bitpos[2]{%
    \ensuremath{\overset{\substack{\mathclap{\text{\tiny #1}}\\ \downarrow}}{#2}}}

Respuesta2

Quizás un poco más de lo esperado, pero bueno, obtienes conversión automática y eliminación opcional de las etiquetas.

\documentclass{article}
\usepackage{amsmath,xparse}

\ExplSyntaxOn
\NewDocumentCommand{\bits}{O{}m}
 {
  \group_begin:
  \keys_set:nn { chekooo/bits } { #1 }
  \chekooo_bits:n { #2 }
  \group_end:
 }

\keys_define:nn { chekooo/bits }
 {
  convert .bool_set:N = \l_chekooo_convert_bool,
  convert .initial:n  = false,
  convert .default:n  = true,
  nosb    .bool_set:N = \l_chekooo_show_bool,
  nosb    .initial:n  = false,
  nosb    .default:n  = true,
 }

\cs_new_protected:Nn \chekooo_bits:n
 {
  \bool_if:NTF \l_chekooo_convert_bool
   {
    \chekooo_process:f { \int_to_bin:n { #1 } }
   }
   {
    \chekooo_process:n { #1 }
   }
 }

\cs_new_protected:Nn \chekooo_process:n
 {
  \bool_if:NTF \l_chekooo_show_bool
   {
    #1
   }
   {
    \chekooo_bits_show:n { #1 }
   }
 }
\cs_generate_variant:Nn \chekooo_process:n { f }

\cs_new_protected:Nn \chekooo_bits_show:n
 {
  \int_compare:nTF { \tl_count:n { #1 } < 2 }
   {
    #1
   }
   {
    \__chekooo_bits_show:n { #1 }
   }
 }

\cs_new_protected:Nn \__chekooo_bits_show:n
 {
  \seq_set_split:Nnn \l__chekooo_bits_seq { } { #1 }
  \seq_pop_left:NN \l__chekooo_bits_seq \l__chekoo_msb_tl
  \seq_pop_right:NN \l__chekooo_bits_seq \l__chekoo_lsb_tl
  \mspace{10mu} % for the M
  \overset
   {
    \substack{\scriptscriptstyle\hidewidth\mathrm{MSB}\hidewidth\\\downarrow}
   }
   {\l__chekoo_msb_tl}
  \mspace{8mu}
  \seq_use:Nn \l__chekooo_bits_seq { \mspace{8mu} }
  \mspace{8mu}
  \overset
   {
    \substack{\scriptscriptstyle\hidewidth\mathrm{LSB}\hidewidth\\\downarrow}
   }
   {\l__chekoo_lsb_tl}
  \mspace{8mu}
 }

\seq_new:N \l__chekooo_bits_seq
\tl_new:N \l__chekoo_msb_tl
\tl_new:N \l__chekoo_lsb_tl

\ExplSyntaxOff

\begin{document}

\[
\bits{1001}+
\bits[nosb]{1001}+
\bits[convert]{42}+
\bits[convert,nosb]{42}
\]
\[
\bits{0}+\bits{1}+\bits{10}+\bits{11}+\bits{100}
\]

\end{document}

ingrese la descripción de la imagen aquí

información relacionada