小编psi*_*lia的帖子

哪种编程语言在其正式规范中具有非常短的无上下文语法?

什么编程语言有短而美的语法(在EBNF中)?

有些语言更易于解析.前段时间我创建了一个简单的VHDL解析器,但速度非常慢.不是因为它完全用Python实现,而是因为VHDL语法(在EBNF中)很大.Python的EBNF很漂亮但不是很短.

我建议像LISP这样的许多函数式编程语言都有简短的语法,但我对一种比较流行的简单命令式语言如C或Bash感兴趣.

c python bash vhdl

11
推荐指数
1
解决办法
4022
查看次数


计算离散对数

给定正整数b, c, m,(b < m) is True找到一个正整数e,这样

(b**e % m == c) is True
Run Code Online (Sandbox Code Playgroud)

其中**是取幂(例如在Ruby,Python或^中的某些其他语言中),%是模运算.什么是最有效的算法(具有最低的大O复杂度)来解决它?

例:

给定b = 5; C = 8; m = 13该算法必须找到e = 7,因为5**7%13 = 8

algorithm math

11
推荐指数
3
解决办法
9262
查看次数

C - 这条线是什么意思?

我试图了解以下最糟糕的C代码(来自uboot项目)的含义:

rc = ((ulong (*)(bd_t *, int, char *[]))addr) (bd, --argc, &argv[1]);
Run Code Online (Sandbox Code Playgroud)

它是什么?一个函数调用?它更具可读性吗?

在此先感谢您的帮助!

c embedded coding-style

11
推荐指数
2
解决办法
683
查看次数

定义数字是否为三角形数字的最快方法

三角数是从1到n的n个自然数的总和.查找给定正整数是否为三角形的最快方法是什么?

这是第1200个到第1300个三角形数字的切割,你可以在这里轻松看到一个位模式(如果没有,尝试缩小):

(720600, '10101111111011011000')
(721801, '10110000001110001001')
(723003, '10110000100000111011')
(724206, '10110000110011101110')
(725410, '10110001000110100010')
(726615, '10110001011001010111')
(727821, '10110001101100001101')
(729028, '10110001111111000100')
(730236, '10110010010001111100')
(731445, '10110010100100110101')
(732655, '10110010110111101111')
(733866, '10110011001010101010')
(735078, '10110011011101100110')
(736291, '10110011110000100011')
(737505, '10110100000011100001')
(738720, '10110100010110100000')
(739936, '10110100101001100000')
(741153, '10110100111100100001')
(742371, '10110101001111100011')
(743590, '10110101100010100110')
(744810, '10110101110101101010')
(746031, '10110110001000101111')
(747253, '10110110011011110101')
(748476, '10110110101110111100')
(749700, '10110111000010000100')
(750925, '10110111010101001101')
(752151, '10110111101000010111')
(753378, '10110111111011100010')
(754606, '10111000001110101110')
(755835, '10111000100001111011')
(757065, '10111000110101001001')
(758296, '10111001001000011000')
(759528, '10111001011011101000')
(760761, '10111001101110111001')
(761995, '10111010000010001011')
(763230, '10111010010101011110')
(764466, '10111010101000110010')
(765703, '10111010111100000111')
(766941, '10111011001111011101') …
Run Code Online (Sandbox Code Playgroud)

c java algorithm math bit-manipulation

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

C - 交换两个相同大小的内存块的最快方法?

交换两个相同大小的非重叠内存区域的最快方法是什么?我说,我需要换(t_Some *a)用(t_Some *b).考虑到时空权衡,会增加临时空间提高速度吗?例如,(char *tmp)vs (int *tmp)?我正在寻找便携式解决方案.

原型:

void swap_elements_of_array(void* base, size_t size_of_element, int a, int b);
Run Code Online (Sandbox Code Playgroud)

c memory swap caching

11
推荐指数
2
解决办法
7240
查看次数

C - 开始一个大项目.文件/目录结构和名称.需要很好的例子

启动一个新的大型C多平台项目,应遵循哪些规则以避免以后遇到困难?例如,作为一个新的开发人员,我可能很难在Linux内核源代码中自我导航 - 这是一个很好的例子,具有高度可进化但难以进入的软件结构,具有不完整的目录结构(例如声音目录和拱门)相同的目录级别).

作为项目架构师,我该怎么做以避免以后的陷阱?当然,我需要非常直观和自我一致的C语言和文件命名约定.但是什么是好的风格,什么不是?我应该只有一个目录还是数十个目录?我应该将所有头文件放在一个公共包含目录中吗?

你能不能给我一个很好的例子?(任何开源C项目)

c open-source directory-structure project

10
推荐指数
1
解决办法
5808
查看次数

特殊字典的最佳数据结构

哪个数据结构在计算复杂性方面最佳,以实现(key,val)项的字典,这些项必须仅支持以下命令:

  1. Insert(key) - 附加val = 1的项目(key,val)
  2. Increment(key) - 增加现有的val(key,val)
  3. Find(key) - 返回(key,val)的val
  4. Select(part_of_key)- 如果strstr(key,part_of_key)!=NULL以相同类型的新字典的形式返回所有项目(key,val)的列表(如果可能的话,不分配新的内存); 例如,如果字典是{(红色,3),(蓝色,4),(绿色,1)},则选择(重新)= {(红色,3),(绿色,1)}
  5. Max(i) - 返回所有项目中具有第i个最大值的项目; 例如,如果字典是{(红色,3),(蓝色,4),(绿色,1)},则Max(1)=蓝色,Max(2)=红色,Max(3)=绿色

键是字符串,值是正整数.字典中的项目数量预计会非常大.

我认为它必须是两种不同数据结构的综合.但它应该是哈希表+二叉树或trie +排序数组还是其他什么?

algorithm hash complexity-theory trie data-structures

10
推荐指数
2
解决办法
505
查看次数

C - 如何使用grep查找所有内部循环?

我有一个包含大量C文件的巨型C项目.我必须找到所有内循环.我确信项目中没有任何O(n³)块,因此只能找到O(n²)-compexity块(循环中的循环).

是否可以使用grep找到所有内部循环?如果是,我可以使用什么正则表达式来查找所有类型的内部循环,例如{for,for},{while,for},{for,while},{do,while}等等?如果没有,是否有任何简单的unix-way方法(可能是多个greps或一种awk)?

c regex grep code-analysis

10
推荐指数
2
解决办法
624
查看次数

C - 如何使用GCC SSE向量扩展访问向量元素

通常我使用以下类型处理3D矢量:

typedef vec3_t float[3];
Run Code Online (Sandbox Code Playgroud)

使用smth初始化向量.喜欢:

vec3_t x_basis = {1.0, 0.0, 0.0};
vec3_t y_basis = {0.0, 1.0, 0.0};
vec3_t z_basis = {0.0, 0.0, 1.0};
Run Code Online (Sandbox Code Playgroud)

并使用smth访问它们.喜欢:

x_basis[X] * y_basis[X] + ...
Run Code Online (Sandbox Code Playgroud)

现在我需要一个使用SSE指令的矢量算术.我有以下代码:

typedef float v4sf __attribute__ ((mode(V4SF)))
int main(void)
{
    v4sf   a,b,c;
    a = (v4sf){0.1f,0.2f,0.3f,0.4f};
    b = (v4sf){0.1f,0.2f,0.3f,0.4f};
    c = (v4sf){0.1f,0.2f,0.3f,0.4f};
    a = b + c;
    printf("a=%f \n", a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GCC支持这种方式.但是......首先,它给了我0.00000的结果.其次,我无法访问这些向量的元素.我的问题是:我如何访问这些载体的元素?我需要smth.像[0]访问X元素,[1]访问Y元素等

PS:我使用以下代码编译此代码:

gcc -msse testgcc.c -o testgcc
Run Code Online (Sandbox Code Playgroud)

gcc sse

9
推荐指数
3
解决办法
8614
查看次数