Visualización de datos como binario en C con mascarillas de bits -- beginner campo con c campo con bitwise camp codereview Relacionados El problema

Displaying data as binary in C with bitmasks


1
vote

problema

Español

Escribí un programa para mostrar datos en la memoria como binario y funcionó. (Me dio un sentido inmenso de satisfacción y alegría para ver este trabajo. Supongo que esto le sucede a los novatos que solo están probando las aguas). Sé que esto no es un código terriblemente inteligente, y estoy seguro de que debe haber muchas mejores formas de hacer esto. Cualquier consejo y ayuda sería genial. Si he hecho algo mal en este programa o si hay alguna práctica de programación mala, estaría feliz de ser corregido.

  #include<stdio.h>  int main() {    char mychar = 'a';   int count = 0;   int bitmask = 128;   while (count < 8){      if (mychar &  bitmask){       printf("1");     }     else{        printf("0");     }      bitmask = bitmask / 2;     count = count +1;   }  return 0;  }   
Original en ingles

I wrote a program to display data in memory as binary and it worked. (It gave me immense sense of satisfaction and joy to see this work. I guess this happens to newbies who are just testing the waters). I know this isn't some terribly smart code, and I'm sure there must be surely lots of better ways to do this. Any advice and help would be great. If I've done something wrong in this program or if there is any bad programming practice, I would be happy to be corrected.

#include<stdio.h>  int main() {    char mychar = 'a';   int count = 0;   int bitmask = 128;   while (count < 8){      if (mychar &  bitmask){       printf("1");     }     else{        printf("0");     }      bitmask = bitmask / 2;     count = count +1;   }  return 0;  } 
        

Lista de respuestas

1
 
vote

Puede usar la operación de turno;

  char mask = 0x01; //define initial mask  if (mask&mychar) printf("1"); // check that spesific bit  mask<<=1; //shift left   

Por supuesto, si desea comenzar a verificar desde la mano derecha, luego cambie a la derecha, puede hacerlo:

  char mask = 0x80;  mask>>=1;   
 

You may use the shift operation;

char mask = 0x01; //define initial mask  if (mask&mychar) printf("1"); // check that spesific bit  mask<<=1; //shift left 

of course if you want to start checking from right hand then shift right you can do :

char mask = 0x80;  mask>>=1; 
 
 
 
 
1
 
vote

Bienvenido a C, su programa parece estar bien.

Cualquier consejos y ayuda sería genial. Si he hecho algo mal en Este programa o si hay alguna práctica de programación mala

No es necesario llamar a printf En cada iteración, guárdela en un búfer (usando malloc o una cadena estática). Y una buena práctica es reutilizar el código (utilizando funciones):

  f(start) = 10  
 

Welcome to C, your program seems ok.

Any advices and help would be great. If I 've done something wrong in this program or if there is any bad programming practice

There is no need to call printf on each iteration, store it in a buffer (using malloc or a static string). And a good practice is to reuse code (using functions):

#include <stdio.h> #include <limits.h>  static char *sbin(unsigned long v, int len) {     static char s[sizeof(v) * CHAR_BIT + 1];     int i, j;      for (i = len - 1, j = 0; i >= 0; i--, j++) {         s[j] = (v & (1UL << i)) ? '1' : '0';     }     s[j] = 0;     return s; }  int main(void) {     printf("%s\n", sbin('a', 8));     return 0; } 
 
 

Relacionados problema

10  Suma más rápida de valores absolutos de 32 diferencias  ( Fastest sum of absolute values of 32 differences ) 
A long1 debe tratarse como una lista de 32 números sin firmar, cada uno de ellos a solo dos bits. Por lo que 0x1234F... representa {0, 1, 0, 2, 0, 3, 1...

3  Pruebas de divisibilidad de números - Seguimiento  ( Testing for divisibility of numbers follow up ) 
( aquí es la pregunta de seguimiento) Tuve otra oportunidad de intentar acelerar mi programa descrito en mi Pregunta previa . La respuesta de JS1 fue...

11  CODILIDAD SOLUCIÓN DE GAPO BINARIO CON REGEX  ( Codility binary gap solution using regex ) 
A continuación se muestra el código que implementé para resolver el problema de brecha binario : Encuentra la secuencia más larga de ceros, limitada por l...

5  Cálculo de suma de comprobación de 16 bits [cerrado]  ( 16 bit checksum calculation ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

4  Decodificación de datos binarios (AIS) del zócalo  ( Decoding of binary data ais from socket ) 
Actualmente estoy trabajando en una Mensaje AIS Decoder escrito en python puro. Es solo un pequeño proyecto para enseñarme algunas cosas sobre los datos bin...

0  Escritor BMP en C  ( Bmp writer in c ) 
Recientemente escribí un escritor BMP en C: bmpwriter.h #ifndef BMPWRITER_ #define BMPWRITER_ #include <stdint.h> int write24BitBMP(const char *outpu...

2  Simplifique el código de verificación de banderas de bits  ( Simplify bit flags checking code ) 
Por favor, ayuda a hacer que este código sea más limpio. Es parte del procedimiento de la ventana que notifica a mi renderizado antes de Área de cliente de ...

7  Cálculo del permiso de archivo octal basado en Linux  ( Calculating linux based octal file permission ) 
Estoy solicitando una posición de devloper de nivel medio. Para avanzar a la 2ª entrevista, debe pasar una prueba técnica. Una de las preguntas fue escribir...

4  Calculadora binaria de Python  ( Python binary calculator ) 
Mi tarea fue construir una calculadora en la adición binaria de soporte de Python, etc. Para comenzar Definir un par de excepciones personalizadas: paper...

2  Función de desvanecimiento de color [cerrado]  ( Color fading function ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos