De Hackers Delight: int hibit(unsigned int n) { n |= (n >> 1); n |= (n >> 2); n |= (n >> 4); n |= (n >> 8); n |= (n >> 16); return n - (n >> 1); } Esta versión es para entradas de 32 bits, pero la lógica se puede ampliar para 64 bits
LEER++i incrementará el valor de i y luego devolver el valor incrementado. i = 1; j = ++i; (i is 2, j is 2) i++ incrementará el valor de i , pero devuelve el valor original que i retenido antes de ser incrementado. i = 1; j = i++; (i is 2, j is 1) Para un for bucle, cualquiera de los dos f
LEERResumen ejecutivo:No. i++ potencialmente podría ser más lento que ++i , ya que el antiguo valor de i es posible que deba guardarse para su uso posterior, pero en la práctica todos los compiladores modernos optimizarán esto. Podemos demostrar esto mirando el código de esta función, ambos con ++i y
LEERYo personalmente uso Visual Leak Detector, aunque puede causar grandes retrasos cuando se filtran bloques grandes (muestra el contenido de todo el bloque filtrado). Si no desea volver a compilar (como requiere Visual Leak Detector), recomendaría WinDbg, que es poderoso y rápido (aunque no es tan f
LEER¡Hurra por los punteros! Este código funciona anticipando 12 bits por cada byte y copiando los bits adecuados hacia adelante. 12 bits es la mitad inferior (nybble) del siguiente byte y la mitad superior de 2 bytes de distancia. unsigned char length = 10; unsigned char data[10] = {0x0,0x0,0x0,0x0,0
LEEREl número 2 a menudo se cita como la forma inteligente de hacerlo. De hecho, es muy probable que sea más lento, ya que oscurece el objetivo explícito del programador:intercambiar dos variables. Esto significa que un compilador no puede optimizarlo para usar las operaciones reales del ensamblador par
LEERResumen ejecutivo: int a[17]; size_t n = sizeof(a)/sizeof(a[0]); Respuesta completa: Para determinar el tamaño de su matriz en bytes, puede usar el sizeof operador: int a[17]; size_t n = sizeof(a); En mi computadora, los ints tienen una longitud de 4 bytes, por lo que n es 68. Para determina
LEERUna cosa para recordar es que el compilador de Matlab en realidad no compila el código de Matlab en instrucciones de máquina nativas. Simplemente lo envuelve en un ejecutable independiente o en una biblioteca con su propio motor de tiempo de ejecución que lo ejecuta. Podría ejecutar su código sin Ma
LEERUn buen resumen está disponible en Estrategias de implementación para continuaciones de primera clase, un artículo de Clinger, Hartheimer y Ost. Recomiendo mirar la implementación de Chez Scheme en particular. La copia de pila no es tan compleja y hay una serie de técnicas bien entendidas disponibl
LEERCuando se desplaza a la izquierda, no hay diferencia entre desplazamiento aritmético y lógico. Al desplazar a la derecha, el tipo de desplazamiento depende del tipo de valor que se desplaza. (Como base para aquellos lectores que no estén familiarizados con la diferencia, un desplazamiento lógico a
LEERMmm, ok. Sugeriría un código como este, entonces: typedef struct { int type; int result; } DialogData; static gboolean display_dialog(gpointer user_data) { DialogData *dialog_data = user_data; GtkWidget *dialog; if (dialog_data->type & MB_YESNO) dialog =
LEERPortMidi es otra biblioteca de E/S MIDI multiplataforma de código abierto que vale la pena consultar. Por otro lado, si está trabajando en una aplicación de tipo sysex, Win32 directo funciona con bastante facilidad. Acabo de encontrar otro marco multiplataforma de código abierto que incluye soporte
LEER(Little endian de 16 bits firmado, mono de 8000 Hz (--format=S16_LE )) Música Mucho ¡mejor que antes! (aunque es bastante largo) main(t){for(;;t++)putchar(((7&(((t>>17)+1)>>2)+((t>>10)&1+2*(t>>18&1))*((23468643[7&t>>12]-48)+(3&t>>11))+((3&
LEERFortran IV: 2=0 Después de esto, cada constante 2 en el programa es cero. Confía en mí, he hecho esto (bueno, hace 25 años) Esto parece funcionar: #define x 2|0 Básicamente, la expresión se expande a (2|0 == 2|(0+2)) . Es un buen ejemplo de por qué se deben usar paréntesis al definir macros.
LEERC (90) (79) (59) (47) (42) (40) int estático x=1;a(){char b[8];printf(%d\n,x++);b[24]-=5*(1-x/101);}main(){a();return 0;} La función a que imprime los números no se llama a sí mismo! Aproveché un desbordamiento de búfer y cambié la dirección de retorno para que el contador del programa pasara p
LEER235 Sustancialmente basado en las agallas de la respuesta 239 de SoniEx2. local o,k,F=type,next,{}for n=0,2 do F[n]=function(a,r,t,G)if n<1 or o{}~=o(a)then return a end t={}r=r or{}r[a]=n<2 and t G=F[n%2]for x,y in k,a do t[r[x]or G(x,r)]=r[y]or G(y,r)end return t end end table.copy={shallow
LEER90 bytes Si podemos usar stdio , ¿por qué no usar sus capacidades de formato para realizar una comparación? main(a,b){scanf(%d%d,&a,&b);snprintf(&a,2,%d,b-a);a&=63;putchar(51-!(a-45)-!!(a-48));} Supone codificación compatible con ASCII y little-endian. 72 bytes Los cocientes se r
LEERVim, 54, 52, 49 47 pulsaciones 2wa0<esc>qqYp<c-a>6ldf @[email protected]$dT]dd:%norm dwf{xwC;<CR>gg0P Explicación: 2wa0<esc> Move 2 words forward, and insert a 0. qq Start recording in register Q Yp
LEERHaskell, 327 360 418 394 bits g.(m.w.r.r=<<).lines.f n:c:z=\n#_0123456789++[A..Z]++[a..z] (!)x=elem x f(\\:\n:a)=f a f(a:b)=a:f b f a=a m(#:a)=c:a++[n] m a=a g(a:#:b)=a:[n|a/=n]++c:g b g(a:b)=a:g b g a=a s=span(! \t) r=reverse.snd.s l n(a:b)d|a==d,n=a:w(snd$s b)|1>0=a:l(not$n&&a==\\
LEERRetina 0.8.2, 60 59 bits i`^(0[0-7]*|0x[\da-f]+|[1-9]\d*)(u)?(l)?(?-i:\3?)(?(2)|u?)$ ¡Pruébelo en línea! El enlace incluye casos de prueba. Editar:Guardado 1 byte gracias a @FryAmTheEggMan. Explicación: i` Haga coincidir mayúsculas y minúsculas. ^(0[0-7]*|0x[\da-f]+|[1-9]\d*) Comience con octa
LEER