如何将整数中的二进制数加倍?例如,如果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:]
但是,我对更快的方式和任何大小的整数感兴趣.也许算术转型应该有所帮助.
哪些编程语言允许您使用Unicode符号定义变量,类和函数的名称?
我有一个嵌入式硬件系统,其中包含一个基于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)
).
给定是320个元素(int16)的数组,其表示持续时间为20ms的音频信号(16位LPCM).我正在寻找一种最简单,最快速的方法,它应该决定这个数组是否包含有效音频(如语音或音乐),而不是噪音或静音.我不需要非常高质量的决定,但它必须非常快.
我首先想到添加元素的所有正方形或绝对值,并将它们的总和与阈值进行比较,但是这种方法在我的系统上非常慢,即使它是O(n).
是否可以使用Python计算给定数字的n个复杂根?我很快检查了它,看起来Python给了我错误/不完整的答案:
(-27.0j)**(1.0/3.0)
产生 (2.598076211353316-1.4999999999999998j)
但正确的根应该是3个复数,因为每个非零数都有n个不同的复数n个根.在Python中有可能吗?
我尝试构建一个使用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代码行(以避免分支)?
if ((i < -threshold) || (i > threshold))
{
counter++;
}
Run Code Online (Sandbox Code Playgroud)
所有变量都是16位有符号整数.优化版本应具有高度可移植性.
我正在寻找一个轻量级的跨平台GUI库,用于不同的信号处理应用程序.ANSI-C程序必须与其静态链接,并且大小很重要.完成的应用程序必须在iPad,iPhone,Android,Ubuntu,Leopard,Windows等平台上具有相同的外观.
Qt是不合适的,因为它是C++,太大了,并且在iOS设备上不起作用.我倾向于基于OpenGL的GUI库,因为每个现代目标平台都支持OpenGL,并且OpenGL应用程序在每个设备上都具有相同的外观.
优选地,这种GUI必须使用声明性语义来支持表单定义,例如来自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预处理器按值对它们进行排序,或者可能有任何编译器标志(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)
好的,这是我的解决方案:
sort -b -i --key=2 tobesorted.c
实际上,有一种可能性直接从预处理器调用"排序"会很好(我希望至少GCC能以某种方式支持这些功能,但似乎它没有).