Bit manipulation 如何为装配盒进行位逻辑

Bit manipulation 如何为装配盒进行位逻辑,bit-manipulation,bitwise-operators,Bit Manipulation,Bitwise Operators,我不擅长比特逻辑,但我认为这将是解决我问题的最好办法 我必须找到一个物体是否适合一个盒子,我不会考虑3D旋转,而是简单的90°选项。 所以基本上,如果物体能以任何方式进入盒子 实际上,我正在对照长方体的尺寸检查对象的所有尺寸,这样我就知道ObjWidth是否适合BoxWidth或BoxLength或BoxHeight等等。 这是使用每个维度的标志enum定义的 enum En_Dimension { None = 0, Width = 1,

我不擅长比特逻辑,但我认为这将是解决我问题的最好办法

我必须找到一个物体是否适合一个盒子,我不会考虑3D旋转,而是简单的90°选项。 所以基本上,如果物体能以任何方式进入盒子

实际上,我正在对照长方体的尺寸检查对象的所有尺寸,这样我就知道
ObjWidth
是否适合
BoxWidth
BoxLength
BoxHeight
等等。 这是使用每个维度的
标志enum
定义的

enum En_Dimension
    {
        None = 0,
        Width = 1,
        Lenght = 2,
        Height = 4,
        All = Width | Length| Height,
    }
所以我可以有(这意味着它适合那一边):

基本上我的方法应该是

bool FitIn (Size container)
{
    En_Dimension width = En_Dimension.None; 
    En_Dimension length = En_Dimension.None;
    En_Dimension height = En_Dimension.None;

    for(var do in this.Dimensions){
        for (var db in container.Dimensions){
            if (do <= db) {
               // already implemented code to
               // SET width OR length OR height
            }
        }
    }

    /// EXAMPLES
    /// 001     001
    /// 110     001
    /// 010     111
    /// FIT     DON'T FIT

    return (/*width, length, height BIT LOGIC*/) == En_Dimension.All
}

可通过6个测试完成,对应于每个排列:

int fittingDims = (int)width | ((int)length << 4) | ((int)height << 8);
return (fittingDims & 0x124) == 0x124 ||
       (fittingDims & 0x142) == 0x142 ||
       (fittingDims & 0x214) == 0x214 ||
       (fittingDims & 0x241) == 0x241 ||
       (fittingDims & 0x412) == 0x412 ||
       (fittingDims & 0x421) == 0x421;

int fittingDims=(int)width |((int)length所以如果我理解正确,我们需要计算的是“给定这些掩码,我们可以通过从每个掩码中选择一个位置来生成111吗”“哈罗德:是的,就是这个想法。顺便问一下,这到底是什么语言?我原以为是C语言,但它并不完全符合C语言,只是为了给出代码的概念。
1**    1**    *1*    *1*    **1    **1
*1*    **1    1**    **1    1**    *1*
**1    *1*    **1    1**    *1*    1**
int fittingDims = (int)width | ((int)length << 4) | ((int)height << 8);
return (fittingDims & 0x124) == 0x124 ||
       (fittingDims & 0x142) == 0x142 ||
       (fittingDims & 0x214) == 0x214 ||
       (fittingDims & 0x241) == 0x241 ||
       (fittingDims & 0x412) == 0x412 ||
       (fittingDims & 0x421) == 0x421;