如何对具有非标准二进制表示的数字进行算术运算?

Jon*_*nas -4 c++ range unsigned-char

使用unsigned char,您可以存储0到255之间的数字

255(b10)= 11111111(b2)<=那是1个字节

这样可以轻松地执行+, - ,*等操作...

现在怎么样:

255(b10)= 10101101(b2)

使用此方法可以使用unsigned char 表示最多399个

399(b10)= 11111111(b2)

有人可以提出一种算法来使用最后一种方法进行加法吗?

pax*_*blo 5

对于8位,只有256个可能的值(2 8),无论你如何切片和切块.

您的方案编码2-3-3形式的数字,如:

255 = 10 101 101
399 = 11 111 111
Run Code Online (Sandbox Code Playgroud)

忽略这样的事实:那里的那些三位序列只能代表八个值(0-7),而不是十个(即第二个将是377,而不是399).

权衡是,这意味着您获得总共82个值的数字'25[6-7]'(2个值)'2[6-7][0-7]'(16个值)和'3[0-7][0-7]'(64个值).

你为此获得的牺牲就是你不能再代表任何包含89:'[8-9]'(2个值),'[1-7][8-9]'(14个值),'[8-9][0-9]'(20个值),'1[0-7][8-9]'(16个值),'1[8-9][0-9]'(20个值)或'2[0-4][8-9]'(10个值)的数字,总计82个值.

那里的平衡(82对82)表明,对于8位数据类型,仍然只有256个可能的值.

因此,您的编码方案基于一个有缺陷的前提,这使得您的问题的第二部分(如何添加它们)无关紧要,我担心.