如何定義二進位數的 MSB 或 LSB

如何定義二進位數的 MSB 或 LSB

我有一個位元字串,希望在第一位上寫入 MSB(最高有效位元的縮寫),在最後一位之上寫入 LSB(最低有效位元的縮寫)。我怎樣才能做到這一點?

在此輸入影像描述

答案1

\overset和的組合\substack使您可以將標籤和箭頭放置在相應數字上方。為了確保標籤的存在不會影響數字的間距,請使用\mathclap。如果有很多這樣的情況,定義一個帶有兩個參數(標籤和數字)的巨集會很有用。

在此輸入影像描述

\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}

附錄:上面顯示的程式碼假設\bitpos將在數學模式下使用。如果不一定是這種情況,\ensuremath{...}也只需提供一個包裝器指令,即定義\bitpos如下:

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

答案2

也許比預期的要長一點,但是,嘿,您可以自動轉換並可選擇刪除標籤。

\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}

在此輸入影像描述

相關內容