C Print Int As Binário Opções
Estou procurando uma função que me permita imprimir a representação binária de um int. O que eu tenho até agora é Mas quando eu chamar 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 algo Desculpe, eu só não posso ver onde estou Vai errado NB O código é a partir de aqui EDIT: não é homework FYI, estou tentando depurar alguém elses manipulação de imagens rotinas em uma língua desconhecida. Se, no entanto, foi marcado como homework porque é um conceito elementar, em seguida, fair play. Às 17:42 A string não é null-terminated Certifique-se de adicionar um caractere 0 no final da seqüência de caracteres ou, você poderia alocá-lo com calloc em vez de malloc. Que irá zerar a memória que é devolvido a você. , Há outros problemas com este código: Como usado, ele aloca memória quando você chamá-lo, deixando o chamador responsável por livre () ing a Cadeia de caracteres alocada. Você vazia memória se você apenas chamá-lo em uma chamada printf. Faça duas passagens Sobre o número, que é unne Cessário. 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 você deseja armazenar a seqüência de resultado dentro. Se você não tem um buffer que você pode passar NULL e int2bin vai escrever para um buffer estático e retornar isso para você. A vantagem disso sobre a implementação original é que o chamador não precisa se preocupar com free () ing a string que é retornada. A desvantagem é que theres apenas um buffer estático para chamadas subsequentes irá substituir os resultados de chamadas anteriores. Você não poderia salvar os resultados de várias chamadas para uso posterior. Além disso, não é threadsafe, ou seja, se você chamar a função dessa maneira de diferentes threads que poderiam clobber cada outras cordas. Se thats uma possibilidade youll necessidade de passar em seu próprio buffer em vez de passar NULL. Como assim: respondeu 21 de junho 09 às 17: 45Ill apenas abordar várias coisas sobre boa prática. Isso provavelmente pode ser simplificado em geral, mas eu não vou tentar focar em particular. Eu não vejo a necessidade de se (número 0). Especialmente em relação ao parse (). Você está apenas ignorando cálculo adicional se o retorno for 0. Se você fizer isso, as saídas no final não serão impressas, mesmo que 0 seja um número válido. Você não precisa usar std :: endl em main (). Isso também libera o buffer, que é desnecessário aqui, e você fazê-lo várias vezes. Basta usar n dentro de uma instrução de impressão. Você pode defini-lo acima de main (). Permitindo que você remova o protótipo de função. Não necessita os parâmetros da linha de comando somente principal () faz. Seus caminhos de controle e retornos não fazem sentido para mim. Se a instrução if é executada, ela exibe uma mensagem e retorna 0. Se o else for executado, ele retornará um inteiro convertido. Em vez disso, a função só deve ser chamada se ele vai analisar algo, que é o seu trabalho principal. As funções devem focar apenas uma coisa. Deixe o código de chamada decidir se ele deve ser chamado. Theres nenhuma necessidade para protegido se você não está usando herança (eu acredito que mesmo Bjarne Stroustrup se lamentou acrescentando que a palavra-chave). Ou alterá-lo para privado. Ou apenas remover a palavra-chave uma vez que as classes são privadas por padrão. Se você não estiver mantendo um ou mais membros de dados, então este programa pode não precisar usar 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 livres (não-membro) ea classe removida completamente. Pode ser transformado em uma única declaração ternária: Melhor ainda, desde std :: string suporta. Use isso em vez disso: As variáveis locais em inttobin () não precisam ser estáticas. Você não precisa de sua própria função inversa apenas usar std :: reverse (). Como rachet freak mencionou nos comentários, você pode usar std :: hex para manipular o IO ao exibir esse valor. Além disso, você pode fazer isso com todos os três sistemas de número. C programa imprimir inteiro Este programa c perguntar ao usuário para introduzir um número inteiro e, em seguida, imprime-o. A entrada é feita usando a função scanf eo número é impresso na tela usando printf. C código de programação Em c linguagem temos tipo de dados para diferentes tipos de dados, para dados inteiros é int, para caracteres data char, para dados de ponto flutuante seu float e assim por diante. Para inteiros grandes, você pode usar um tipo de dados longo ou longo. Para armazenar inteiros que são maiores que 218-1 que é o intervalo de tipo de dados longo longo você pode usar seqüências de caracteres. No código abaixo, armazenamos um inteiro em uma seqüência de caracteres e exibimos-lo. C programa para armazenar o inteiro em uma corda Saída do programa: A vantagem de usar a corda é que nós podemos armazenar inteiros muito muito grandes. A linguagem de programação C não tem um tipo incorporado para lidar com grandes números.
Comments
Post a Comment