C 如何在没有if语句的情况下将if语句转换为按位操作

C 如何在没有if语句的情况下将if语句转换为按位操作,c,bitwise-operators,C,Bitwise Operators,我的任务是: 三个平面X=0、Y=0和Z=0将三维空间划分为8个八分域。给予 在三维点阵列中,以下函数计算属于每个点的点的数量 八分之一。编写一个不使用if语句或if运算符的函数版本 typedef float pnt[3]; 无效计数(pnt const*pnts,const int n,unsigned cnt[8]){ 对于(int i=0;i=0.0f&&pnts[i][2]>=0.0f)++cnt[7];else 如果(pnts[i][0]>=0.0f&&pnts[i][1]>=0.0

我的任务是:

三个平面X=0、Y=0和Z=0将三维空间划分为8个八分域。给予 在三维点阵列中,以下函数计算属于每个点的点的数量 八分之一。编写一个不使用if语句或if运算符的函数版本

typedef float pnt[3];
无效计数(pnt const*pnts,const int n,unsigned cnt[8]){
对于(int i=0;i=0.0f&&pnts[i][2]>=0.0f)++cnt[7];else
如果(pnts[i][0]>=0.0f&&pnts[i][1]>=0.0f&&pnts[i][2]<0.0f)++cnt[3];则
如果(pnts[i][0]>=0.0f&&pnts[i][1]<0.0f&&pnts[i][2]>=0.0f)++cnt[5];则
如果(pnts[i][0]>=0.0f&&pnts[i][1]<0.0f&&pnts[i][2]<0.0f)++cnt[1];则
如果(pnts[i][0]<0.0f&&pnts[i][1]>=0.0f&&pnts[i][2]>=0.0f)++cnt[6];则
如果(pnts[i][0]<0.0f&&pnts[i][1]>=0.0f&&pnts[i][2]<0.0f)++cnt[2];则
如果(pnts[i][0]<0.0f&&pnts[i][1]<0.0f&&pnts[i][2]>=0.0f)++cnt[4];则
++cnt[0];
}

解决此问题的最佳方法是什么?

首先,每个条件设置位,得到的位字段是索引:

for(int i=0; i<n; ++i) {
    unsigned index = 
        ((pnts[i][0] >= 0.0f) << 0) |
        ((pnts[i][1] >= 0.0f) << 1) |
        ((pnts[i][2] >= 0.0f) << 2);
    ++cnt[index];
}

for(int i=0;i=0.0f)=0.0f)=
运算符返回
0
1
,然后将其移动到正确的位置。

首先每个条件设置位,得到的位字段是索引:

for(int i=0; i<n; ++i) {
    unsigned index = 
        ((pnts[i][0] >= 0.0f) << 0) |
        ((pnts[i][1] >= 0.0f) << 1) |
        ((pnts[i][2] >= 0.0f) << 2);
    ++cnt[index];
}

for(inti=0;i=0.0f)=0.0f)=
运算符返回
0
1
,然后将其移动到正确的位置。

“我有这个任务:”-这是家庭作业吗?您是否有自己的建议或尝试?(“提供一个不利于学生学习的答案不符合学生自身的最佳利益。”)有一些关于家庭作业问题的好的指导方针,旨在帮助学生尽可能多地学习,虽然仍然允许社区支持学生在他们自己的尝试已经运行的时候。步骤0:选择一个语言提示:布尔表达式的结果可以被解释为0/1整数,而不是代码>(a>0)C++;<代码>你可以写
c+=a>0但我不确定这种方法是否能为您的任务带来“预期”的解决方案。我不知道为什么ppl总是关注“最佳”。你有什么解决办法吗?只要你一无所有,什么都是最好的“我有这个任务:”-这是家庭作业吗?您是否有自己的建议或尝试?(“提供一个不利于学生学习的答案不符合学生自身的最佳利益。”)有一些关于家庭作业问题的好的指导方针,旨在帮助学生尽可能多地学习,虽然仍然允许社区支持学生在他们自己的尝试已经运行的时候。步骤0:选择一个语言提示:布尔表达式的结果可以被解释为0/1整数,而不是代码>(a>0)C++;<代码>你可以写
c+=a>0但我不确定这种方法是否能为您的任务带来“预期”的解决方案。我不知道为什么ppl总是关注“最佳”。你有什么解决办法吗?只要你一无所有,一切都是最好的