[英]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_0000
和1111_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.