相关疑难解决方法(0)

C动态增长阵列

我有一个程序读取游戏中实体的"原始"列表,我打算创建一个数组,其中包含一个不确定数量的实体的索引号(int),用于处理各种事物.我想避免使用太多的内存或CPU来保存这些索引......

到目前为止,我使用的一个快速而肮脏的解决方案是在主处理函数(本地焦点)中声明具有最大游戏实体大小的数组,以及另一个整数来跟踪已添加到列表中的数量.这并不令人满意,因为每个列表都拥有3000多个阵列,这并不是那么多,但感觉就像是浪费,因为我可以使用6-7列表的解决方案来实现不同的功能.

我没有找到任何C(不是C++或C#)特定的解决方案来实现这一目标.我可以使用指针,但我有点害怕使用它们(除非它是唯一可能的方式).

数组不会离开本地函数作用域(它们将被传递给函数,然后被丢弃),以防更改内容.

如果指针是唯一的解决方案,我如何跟踪它们以避免泄漏?

c dynamic-arrays

120
推荐指数
4
解决办法
20万
查看次数

84
推荐指数
4
解决办法
5575
查看次数

49
推荐指数
12
解决办法
4万
查看次数

另一种在不使用"*"运算符的情况下将两个数相乘的方法

昨天我进行了一次有趣的采访,面试官问我一个经典问题:如何在不使用*运算符的情况下将Java中的两个数字相乘.老实说,我不知道这是采访带来的压力,但我无法提出任何解决方案.

面试结束后,我回到家中,通过SO轻松寻找答案.到目前为止,我发现了以下内容:

第一种方法:使用For循环

// Using For loop
public static int multiplierLoop(int a, int b) {
    int resultat = 0;
    for (int i = 0; i < a; i++) {
        resultat += b;
    }

    return resultat;
}
Run Code Online (Sandbox Code Playgroud)

第二种方法:使用递归

// using Recursion
public static int multiplier(int a, int b) {

    if ((a == 0) || (b == 0))
        return 0;
    else
        return (a + multiplier(a, b - 1));

}
Run Code Online (Sandbox Code Playgroud)

第三种方法:使用Log10

**// Using Math.Log10
public static double multiplierLog(int …
Run Code Online (Sandbox Code Playgroud)

java

24
推荐指数
4
解决办法
9562
查看次数

测试位板是否只有一位设置为1

我有一个位板,如果只有一位设置为1,我想检查C.

#include <stdint.h>
typedef uint64_t bboard;
bboard b = 0x0000000000000010;
if (only_one_bit_set_to_one (b)) // in this example expected true
  // do something...
Run Code Online (Sandbox Code Playgroud)

有没有想过写这个功能int only_one_bit_set_to_one (bboard b)

c bitboard

17
推荐指数
1
解决办法
1万
查看次数

如何在不使用boost的情况下重写此代码?

我的任务是修改Sergiu Dotenco的Well Equidistributed Long-period Linear(WELL)算法代码以不使用boost(不是说提升是坏的,但由于某些公司的政策,我必须删除它).

现在,Sergiu的WELL正在使用boost的mpl库,背后有相当多的逻辑.所以一种方法是阅读所有这些,然后我自然能够完成任务.另一种方式是,用一些最佳猜测逐位替换.

我是第二种方式希望这种尝试和错误的方法会更快.到目前为止,我已经成功地替代boost::mpl::if_if_c使用std::conditional,但命中错误时尝试更新IsPowerOfTwoPower2Modulo等,这就是为什么我寻求帮助那里.

下面是代码,如何在没有boost的情况下重写它,但只有c ++ 17?

/**
    * Conditional expression of type (r & (r - 1)) == 0 which allows to check
    * whether a number @f$r@f$ is of type @f$2^n@f$.
    */
    typedef boost::mpl::equal_to<
        boost::mpl::bitand_<
        boost::mpl::_,
        boost::mpl::minus<boost::mpl::_, boost::mpl::int_<1>
        >
        >,
        boost::mpl::int_<0>
    > IsPowerOfTwo;

    template<class UIntType, UIntType r>
    struct Power2Modulo
    {
        typedef typename boost::mpl::apply<
            IsPowerOfTwo,
            boost::mpl::integral_c<UIntType, r>
        >::type type;

        BOOST_STATIC_ASSERT(type::value);

        template<class T>
        static T …
Run Code Online (Sandbox Code Playgroud)

c++ random boost metaprogramming

8
推荐指数
2
解决办法
755
查看次数

通过查看最后一位来检查数字是否均匀 - 有没有像这样的其他"技巧"?

最近我发现,如果我需要查看变量是偶数(还是奇数),我只能看看变量的最后一位是否等于0.这个发现在实现时取代了少数模2计算,因此整个函数运行得更快.

还有像这样的"技巧",使用位可以替代其他计算,从而改善功能执行时间吗?

c++ bit-manipulation

7
推荐指数
1
解决办法
2887
查看次数

检查整数内是否只设置了一个位(无论其位置如何)

我使用64位整数内的位存储标志.
我想知道是否有一个位设置无论64位整数内的位置(ei我不关心任何特定位的位置).

boolean isOneSingleBitSet (long integer64)
{
   return ....;
}
Run Code Online (Sandbox Code Playgroud)

我可以使用Bit Twiddling Hacks(Sean Eron Anderson)计算位数,但我想知道检测单个位是否设置的最有效方法是什么...

我发现了一些其他相关的问题:

以及一些维基百科页面:

注意:我的应用程序是在java中,但我很好奇使用其他语言的优化...


编辑:琉永福指出我的问题在我的第一个链接已经得到了答案:请参见如果一个整数是2的幂确定位操作黑客(肖恩·安德森玉龙).我没有意识到单个位与2的幂相同.

java binary bit-manipulation bit bitwise-operators

7
推荐指数
2
解决办法
9461
查看次数

按位代码"$ n&($ n - 1)"有什么作用?

这段代码意味着什么,以及在不使用位移的情况下以其他方式实现同​​样的目标?

if ($n & ($n - 1))
Run Code Online (Sandbox Code Playgroud)

php bit-manipulation bitwise-and

6
推荐指数
2
解决办法
3915
查看次数

确定数字是否为二进制序列1 2 4 8 16 32 64等

可能重复:
如何检查数字是否为2的幂

我想确定一个数字是否在

1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 ...

我试过这个:

public static void Main(string[] args)
{            
    int result = 1;  
    for (int i = 0; i < 15; i++)
    {          
        //Console.WriteLine(result);
        Console.WriteLine(result % 2);
        result *= 2;

    }  
}
Run Code Online (Sandbox Code Playgroud)

你可以看到它返回 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

我应该如何有效地使上述印刷品0适用于包括1在内的所有印刷品?

.net c# math binary

6
推荐指数
1
解决办法
2万
查看次数