C Print Int As Binary Options


Vou abordar várias coisas sobre boas práticas. Isso provavelmente pode ser simplificado de forma geral, mas não terei como especial atenção. Não vejo a necessidade de se (número 0). Especialmente em relação à análise (). Você está apenas pulando mais cálculos se o retorno for 0. Se você fizer isso, as saídas no final não serão impressas, embora 0 seja um número válido. Você não precisa usar std :: endl em main (). Isso também descarrega o buffer, o que é desnecessário aqui, e você faz várias vezes. Basta usar n em uma declaração de impressão. Você pode defini-lo acima de main (). Permitindo que você remova o protótipo da função. Não precisa dos parâmetros da linha de comando somente principal (). Seus caminhos de controle e retornos não fazem sentido para mim. Se a instrução if for executada, ela exibirá uma mensagem e retornará 0. Se o else for executado, ele retornará um inteiro convertido. Em vez disso, a função só deve ser chamada se analisar alguma coisa, que é o principal trabalho. As funções devem se concentrar em apenas uma coisa. Deixe o código de chamada decidir se ele deve ser chamado. Não há necessidade de proteção se você não estiver usando herança (eu acredito que mesmo o próprio Bjarne Stroustrup lamentou adicionar essa palavra-chave). Ou mude para o privado. Ou simplesmente remova a palavra-chave, pois as classes são privadas por padrão. Se você não estiver mantendo um ou mais membros de dados, esse programa talvez não precise utilizar as classes. Este apenas contém funções, mas as funções de classe devem mudar o estado de um ou mais membros de dados. Em vez disso, essas funções poderiam ser apenas funções gratuitas (não-membros) e a classe removida inteiramente. Pode ser transformado em uma declaração de um único ternário: melhor ainda, uma vez que o std :: string é compatível. Use isso em vez disso: as variáveis ​​locais no inttobin () não precisam ser estáticas. Você não precisa de sua própria função reversa apenas use std :: reverse (). Como rachet freak mencionou nos comentários, você pode usar std :: hex para manipular o I O ao exibir esse valor. Além disso, você pode fazer isso com os três sistemas de números. Estou procurando uma função para me permitir imprimir a representação binária de um int. O que eu tenho até agora é, mas quando eu chamo eu recebo saída como 0000000000000000000000000000000000xtpYy (E um monte de caracteres desconhecidos. É uma falha na função ou estou imprimindo o endereço da matriz de caracteres ou alguma coisa? Desculpe, eu simplesmente não consigo ver onde eu estou Errado. NB O código é daqui EDITAR: não é tarefa de casa FYI, estou tentando depurar algumas rotinas de manipulação de imagem em uma linguagem desconhecida. Se, no entanto, foi marcado como lição de casa porque é um conceito elementar, em seguida, o fair play. Perguntou Jun 21 09 Às 17:42 Sua corda não está terminada em nulo. Certifique-se de adicionar um caractere 0 no final da string ou, você poderia alocá-lo com calloc em vez de malloc. Que irá zero a memória que é retornada para você. , Há outros problemas com este código: conforme usado, ele aloca memória quando você o chama, deixando o chamador responsável por livre () na cadeia alocada. Você perderá a memória se você apenas chamar uma chamada de impressão. Faz duas passagens Sobre o número, que é unne Cessary. Você pode fazer tudo em um loop. Heres uma implementação alternativa que você poderia usar. O segundo parâmetro é um ponteiro para um buffer que deseja armazenar a sequência de resultados. Se você não tiver um buffer, você pode passar NULL e o int2bin irá gravar em um buffer estático e retorná-lo. A vantagem disto sobre a implementação original é que o chamador não precisa se preocupar com livre () na seqüência que é retornada. Uma desvantagem é que há apenas um buffer estático, então as chamadas subseqüentes substituirão os resultados das chamadas anteriores. Você não pode salvar os resultados de várias chamadas para uso posterior. Além disso, não é thread-safe, o que significa que, se você chamar a função dessa maneira de diferentes threads, eles poderiam clobber cada outras cordas. Se essa for uma possibilidade, você precisará passar no seu próprio buffer em vez de passar NULL. Assim: respondeu 21 de junho 09 às 17:45

Comments