小编psi*_*lia的帖子

加倍二进制数字

如何将整数中的二进制数加倍?例如,如果bin(x)="1001"则bin(y)必须是"11000011".有没有智能和快速的算法?

更新:这是一个优雅的解决方案:

''.join([''.join(i) for i in zip(X,X)])
Run Code Online (Sandbox Code Playgroud)

其中X是bin(int_x)[2:]

但是,我对更快的方式和任何大小的整数感兴趣.也许算术转型应该有所帮助.

python algorithm math binary

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

在函数/变量/类的名称中允许Unicode的编程语言?

哪些编程语言允许您使用Unicode符号定义变量,类和函数的名称?

unicode syntax programming-languages

8
推荐指数
0
解决办法
2082
查看次数

GCC,ARMboot - 创建没有任何库和任何操作系统的独立应用程序

我有一个嵌入式硬件系统,其中包含一个基于ARMboot的引导加载程序(与Uboot和PPCboot非常相似).

此引导加载程序通常用于从闪存加载uClinux映像.但是,现在我正在尝试使用此引导加载程序来运行独立的helloworld应用程序,它不需要任何链接库.实际上,它只包含while(1){}main函数中的代码.

我的问题是我无法找出我应该使用哪些GCC设置来构建一个独立的格式正确的二进制文件.

我使用以下构建命令:

cr16-elf-gcc -o helloworld helloworld.c -nostdlib
Run Code Online (Sandbox Code Playgroud)

产生警告信息:
警告:找不到条目符号_start; 默认为00000004

此后,在引导加载程序中,我上传生成的应用程序并在某个地址启动它:

tftpboot 0xa00000 helloworld
go 0xa00004
Run Code Online (Sandbox Code Playgroud)

但它不起作用:(系统重新启动.

通常它应该挂起(因为while(1)).

c embedded gcc arm bootloader

8
推荐指数
1
解决办法
2731
查看次数

最简单快速的音频活动检测方法?

给定是320个元素(int16)的数组,其表示持续时间为20ms的音频信号(16位LPCM).我正在寻找一种最简单,最快速的方法,它应该决定这个数组是否包含有效音频(如语音或音乐),而不是噪音或静音.我不需要非常高质量的决定,但它必须非常快.

我首先想到添加元素的所有正方形或绝对值,并将它们的总和与阈值进行比较,但是这种方法在我的系统上非常慢,即使它是O(n).

c embedded algorithm audio signal-processing

8
推荐指数
1
解决办法
3492
查看次数

Python - 如何计算数字的所有第n个根?

是否可以使用Python计算给定数字的n个复杂根?我很快检查了它,看起来Python给了我错误/不完整的答案:

(-27.0j)**(1.0/3.0) 产生 (2.598076211353316-1.4999999999999998j)

但正确的根应该是3个复数,因为每个非零数都有n个不同的复数n个根.在Python中有可能吗?

python math

8
推荐指数
1
解决办法
9066
查看次数

GCC - 如何重新排列堆栈?

我尝试构建一个使用pthreads和__m128 SSE类型的应用程序.根据GCC手册,默认堆栈对齐是16个字节.为了使用__m128,要求是16字节对齐.

我的目标CPU支持SSE.我使用的GCC编译器不支持运行时堆栈重组(例如-mstackrealign).我不能使用任何其他GCC编译器版本.

我的测试应用程序如下:

#include <xmmintrin.h>
#include <pthread.h>
void *f(void *x){
   __m128 y;
   ...
}
int main(void){
  pthread_t p;
  pthread_create(&p, NULL, f, NULL);
}
Run Code Online (Sandbox Code Playgroud)

应用程序生成异常并退出.经过简单的调试(printf"%p",&y)后,我发现变量y不是16字节对齐的.

我的问题是:如何在不使用任何GCC标志和属性(它们没有帮助)的情况下正确地重新对齐堆栈(16字节)?我应该在这个线程函数f()中使用GCC内联汇编程序吗?

c stack gcc sse pthreads

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

如何优化这一行C代码(检查范围)?

有没有办法优化下面的C代码行(以避免分支)?

if ((i < -threshold) || (i > threshold)) 
{ 
    counter++; 
}
Run Code Online (Sandbox Code Playgroud)

所有变量都是16位有符号整数.优化版本应具有高度可移植性.

c math optimization

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

轻量级跨平台C GUI(OpenGL)

我正在寻找一个轻量级的跨平台GUI库,用于不同的信号处理应用程序.ANSI-C程序必须与其静态链接,并且大小很重要.完成的应用程序必须在iPad,iPhone,Android,Ubuntu,Leopard,Windows等平台上具有相同的外观.

Qt是不合适的,因为它是C++,太大了,并且在iOS设备上不起作用.我倾向于基于OpenGL的GUI库,因为每个现代目标平台都支持OpenGL,并且OpenGL应用程序在每个设备上都具有相同的外观.

优选地,这种GUI必须使用声明性语义来支持表单定义,例如来自C字符串或来自外部文本文件.

c user-interface android opengl-es ios

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

使用Python语法的子集加速编写C程序

我一直在努力优化自己的时间.编写C代码需要花费大量时间,并且需要比编写Python程序更多的键盘触摸.

但是,为了加快创建C程序所需的时间,可以自动化许多事情.我想用smth写我的程序.像Python一样,但有C语义.这意味着,所有关键字都是C关键字,但语法已经过优化.

例如,这个C代码:

#include "dsplib.h"
#include "coeffs.h"

#define MODULENAME "dsplib"
#define NUM_SAMPLES 320

typedef float t_Vec; 
typedef struct s_Inter
{
    char *pc_Name;
    struct s_Inter *px_Next;
}t_Inter; 
typedef struct s_DspLibControl
{ 
    t_Vec f_Y; 
}t_DspLibControl;

void v_DspLibName(void)
{ 
    printf("Module: %s", MODULENAME); printf("\n");
} 

int v_DspLibInitInterControl(t_DspLibControl *px_Con)
{ 
    int y; 
    px_Con->f_Y             = 0.0; 
    for(int i=0;i<10;i++) 
    { 
        y += i * i; 
    } 
    return y;
} 
Run Code Online (Sandbox Code Playgroud)

在优化的pythonized版本中可以看起来像:

include dsplib, coeffs
define MODULENAME="dsplib", NUM_SAMPLES=320

typedef float t_Vec 
typedef struct s_Inter:
        char *pc_Name
        struct s_Inter *px_Next …
Run Code Online (Sandbox Code Playgroud)

c python syntax vim scripting

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

是否可以使用预处理器对数组进行排序?

我有很多非常长的数组.没有运行时排序是可能的.手动排序也很耗时.此外,可以在以后以任何顺序添加新元素,因此我想使用C预处理器按值对它们进行排序,或者可能有任何编译器标志(GCC)?

例如:

sometype S[] = {
  {somevals, "BOB", someothervals},
  {somevals, "ALICE", someothervals},
  {somevals, "TIM", someothervals},
}
Run Code Online (Sandbox Code Playgroud)

必须这样排序:

sometype S[] = {
   {somevals, "ALICE", someothervals},
   {somevals, "BOB", someothervals},
   {somevals, "TIM", someothervals},
}
Run Code Online (Sandbox Code Playgroud)


解决了

好的,这是我的解决方案:

  1. 手动将每个数组复制并粘贴到名为tobesorted.c的临时文件中
  2. 按第二列排序: sort -b -i --key=2 tobesorted.c
  3. 将输出复制并粘贴回原始文件.

实际上,有一种可能性直接从预处理器调用"排序"会很好(我希望至少GCC能以某种方式支持这些功能,但似乎它没有).

c sorting gcc c-preprocessor

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