繁体   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