Como escrever um código C em 64-bit ponto fixo?

B

boeysue

Guest
Como escrever um 64-bit de ponto fixo de código C em unix? Porque em unix, a operação de 64-bit ponto fixo não está certo ... Então alguém pode me dizer como escrever uma operação em 64 bits ponto fixo no código C ! obrigado pela ajuda!
 
64 bits sintaxe inteiro tende a ser não-portáteis em 32-bit compiladores. Qual compilador você está usando, e qual o problema que você está vendo? Publicar um pequeno programa que demonstra o problema. Isso funciona em MinGW GCC 3.4.2, mas a longo prazo, LL, e I64d% podem ser diferentes no seu compilador:
Code:
 # include int (void) main {long long a = 1122334455667788LL, b = 1000; printf (" produto =% I64d \ n ", a * b); return 0;} produto = 1122334455667788000
 
64-bit longa operação com a mudança e + parece estar errado. Porque eu uso o servidor para mudar o diretamente de 32 bits para 64 bits, ele parece estar saturado em 2 ^ 16. Então, eu só acho que o ansi não apoiar a operação de 64-bit operação. By the way, Qual é a resposta para me ajudar a da mudança / adicionar operação em 64 bits! Muito obrigado.
 
Conte-nos sua versão do compilador e nos mostrar o seu código não-trabalho para que possamos ajudá-lo. O que quer dizer, use servidor para mudar de 32 bits para 64 bits? ANSI não especifica o número de bits. Isso é compilador dependente.
 
Na verdade eu só faço um filtro de dizimação cic assim como meu dizimação é 128 e meu estágio é de 5 ª ordem, então eu vejo a saída da vara bitstream para 2 ^ 16. By the way, Como usar o comando cicdecim em matlab? A configuração LIT / OWL parece estranho, talvez eu tenha a idéia errada sobre ela. plz me ajudar ..
 
Eu nunca usei que MATLAB filtro. Digite este comando para ver muitas informações e exemplos: [color = blue] doc mfilt.cicdecim [/color]
 
Na verdade eu uso +1 / -1 como entrada, e definindo IWL = 1, existe uma mensagem de alerta a muitos. Mas se eu usar IWL = 2, a saída de fluxo contínuo de erro costuras .. Então eu faço confuso da introdução da MathWorks.
 
union {unsigned x unsigned longos; y longo;}, este é um inteiro de 64 bits é certo?
 
union {unsigned x unsigned longos; y longo;}, este é um inteiro de 64 bits é certo? nenhum x sem sinal de comprimento e y reside no mesmo lugar. tamanho de estrutura é igual a sizeof tipo mais longa de dados. sizeof (union {unsigned x comprimento; unsigned long y;}) = sizeof (unsigned long), você pode definir como este typedef struct {upperPart unsigned long; lowerPart unsigned long;} int_64_Bits, mas você não pode usar essa estrutura diretamente em operações arihtmetic . você mastro definir operadores ou funções personalizadas
 
mmm .. Quer dizer que precisa ter para além de duas partes de 32 bits? Mas como fazer a operação de somar e multiplicar? Especialmente se multiplicar .... Obrigado por responder.
 
Como usar duas partes em unix sem montagem? Porque o carry-out após a operação de adição, é o problema que eu não conseguia entender. Plz ajudar.
 
Você pode expressar mais claramente? Qual parâmetro ou variáveis ​​que ele usa para isso? Porque eu imprimir o WORDSIZE __, é 32.I não usá-lo para alargar para 64-bit operation.Thanks para isso. [Size = 2] [color = # 999999] Adicionado após 7 minutos: [/color] [/size] isso parece problema ... long long x = 0x01
 
Boeysue, finalmente você está dando-nos alguma informação! Mas ainda não é suficiente. Se você compilar com que o Wall-opção (advertências), gcc deve avisar que o printf tem formato int inconsistente e tipo de argumento. O x% diz printf para assumir um argumento int (aparentemente de 32 bits em seu compilador). Tente LLX% ou I64x% em vez. Eu não posso adivinhar a sintaxe exata, porque depende de seu sistema operacional e versão do compilador precisa (tipo gcc - version). ... Além ... Ok, i686 significa que é uma caixa de Pentium. Inteiros de 32 bits como você determinou. Eu não usei que compilador exata, mas a LLX% é um bom candidato. Experimente! Eu não entendo "como obter mais informações no comando?". Talvez você esteja perguntando sobre-Wall. Eu corro o compilador assim: gcc-Wall myprogram.c
 
mmm ... É isso mesmo ... Ele me ajuda a não fazer coisa nonuseless muitos para work.Because vejo muitos documento não recommand para escrever mais de 32 code.So pouco a discussão acima me ajuda muito obrigado mais.
 
Ahh! Veja como é muito mais fácil para nós para ajudá-lo quando você mostrar-nos o seu código fonte? ;) Estas páginas podem ser úteis também: GCC seção do manual 4,10 (descreve "LL" e "longa"): http://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_4.html # SEC71 GLIBC printf () inteiro de precisão especificadores (descreve "ll"): O GCC é um compilador excelente. Se ele faz algo que eu não esperava, normalmente é culpa minha!
 
Será que não sair de qualquer documento detalhado sobre as ferramentas do GCC obrigado por ajuda:? SM9:
 

Welcome to EDABoard.com

Sponsor

Back
Top