如何在不事先知道哪个的情况下以二进制数计算0或1

问题描述

我正在组装(MIps32),需要根据用户决定计算0的 OR 1的数量。 (即我事先不知道哪个)

需要该程序执行自上而下的操作,以便不允许控制流。

示例1

数字的二进制代表:00001010

用户选择:0

answer:6

Example2

数字的二进制代表:00001010

用户选择:1

answer:2

如果我事先知道哪一个,我就知道如何使用位掩码来计算两者的总数。但是,我完全迷失了如何获取任何一个的信息,而无需事先知道哪个。

解决方法

因此,假设您知道如何计算0的数量。一种方法是,如果用户想要1,则在对0计数之前对数字进行补码(按位非)。

实现后者的一种方法是通过与-1(以二进制补码表示,因此全为1)进行XOR。如果否定用户选择的0或1,则得到0或-1,并且与0的XOR不会影响数字。因此,在C语言中,这看起来像是

result = count_zeros(number ^ -choice)

我不知道MIPS指令集,所以我会把它留给你用汇编语言编写。

(如果这是一项作业,请记住在提交的内容中引用此答案。)