Estoy en el medio de este proyecto C que deseo hacer que la memoria sea muy eficiente. En varios casos, estoy usando el vacío * s de una estructura de matriz dinámica que escribí para contener bits. Deseo usar los 64 bits (en este caso).¿Cambios de bits en un puntero C?
Pronto me di cuenta de que en realidad no se puede manipular un bit en un puntero. Así que mi solución fue la siguiente:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
Esto hace el trabajo, pero sólo porque en mi equipo, largos y punteros son iguales en tamaño. ¿Será este el caso en todas (o la mayoría) de las arquitecturas?
Y mi verdadera pregunta: ¿Hay una manera más correcta de hacer la manipulación de bits en un puntero? había pensado que este enfoque era algo común en C (bits en un vacío de embalaje *), pero podría estar equivocado ...
Usaría uint64_t en lugar de stdint.h – sambowry
uint64_t sería demasiado grande si su plataforma tiene punteros de menos de 64 bits. Use intptr_t y uintptr_t desde el mismo encabezado. – tgamblin
@sambowry - Parece que necesitas pasar por 'stdint.h' un poco más cerca. –