簡體   English   中英

給定一個字節中的 8 位,如何找到翻轉該字節中一位或多位所產生的所有可能數字

[英]Given 8 bits in a byte, how to find all the possible numbers resulting from flipping of one or more bits in this byte

我正在使用字節變量來存儲顏色組合。 每個位位置的值代表一種顏色。 因此,通過打開字節中的一位或多位,可以將顏色組合保存到內存變量中。

我正在尋找算法來生成 [字節的一個或多個位] 處於打開或關閉狀態的所有可能組合,但所有位都關閉,即。 0.

const
  GREEN = 1; //binary 1
  RED = 2; //binary 10;
  BLUE = 4; //binary 100;
  ORANGE = 8; //binary 1000;
  VIOLET = 16; //binary 10000;
  YELLOW = 32; //binary 100000;
  CYAN = 64; //binary 1000000;
  WHITE = 128; //binary 10000000;

這是所有 8 位都打開時字節的樣子:

字節

一個字節可以被認為代表一個無符號數 0..255。 它們分別由值0000_00001111_1111表示。 每個位代表一個特定的 2 次冪。 讓我們使用索引b_i從左到右對位進行編號。 然后這些位在它們打開時代表一個值v_i = 2 ^ b_i當它們不打開時代表零。 該數字是所有v_i值的相加。

回到您的問題,您唯一需要做的就是創建除值0000_0000之外的所有字節值。 您可以創建一個從 1 ( 0000_0001 ) 開始然后計數到 255 的計數器。結果變量將遍歷所有可能的值。 通常你可以,在編程語言中,只需聲明一個字節變量來執行此操作(在Pascal中: color: byte;似乎是),然后使用color = color + 1; color++如果您的語言支持此功能。 當然,聲明、添加和檢查<= 255都可以放在for循環中。

一個棘手的問題是如何將不同的顏色組合成一種新的顏色? 尤其是包含WHITE是令人煩惱的。 我們經常簡單地使用紅綠藍 (RGB),盡管現在專業人士使用其他色彩空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM