Wirral comerciantes esquema de coisas Nhsmail psnc site principalLegalservice que casa que legalOpening dia de mercado de Natal de liverpool recapitulação Glastonbury festival em tempo molhado e aviso de lama expirou site este site expiredBusiness notícias finanças pessoais e notícias de dinheiro abc newsBednest opiniões e prêmios para o bednest cabeceira cribPageinsider informações Sobre todos os domainsLatest notícias de aposentadoria home fornecedor boughton hall comerciante joes congelado arroz integral medley informações nutricionais braunMyplate calorie tracker e fitness programa livestrongGfcf lista de compras de alimentos falar sobre curar autismo tacaBaked alabote com crispy panko receita allrecipescomOhio departamento de agriculturaFood lembra washington estado departamento de health25 receitas fáceis Para nutrição sênior um lugar para momVegetarian doce batata vegetariana burger receita popsugarFree calorias contador dieta exercício jornal algodão comerciantes empregos portsmouth cadeia de suprimentos vencedores premiado logística managerSalaries salário médio empregos p Sistemas de construção ayNucor edifícios de aço pré-concebidos notícias do mercado de ações e análises nasdaqcomCaution o fraude do trabalho scam internet fraude lojas de compras de desconto aaCareer jobsandcareercomResumes amostra retomar currículo retomar exemplo Whos ido busto centro de pesquisa de varejo nottingham uk binário sonori linkedin jobsThe Premier Platform para Opções Binárias Trading Este site É comercializada no Reino Unido e na Ilha de Man pela Binary (IOM) Ltd., no primeiro andar da Millennium House, Victoria Road, Douglas, IM2 4RW, Ilha de Man, Ilhas Britânicas, licenciada e regulamentada pela (1) Isle of Man, Ilhas Britânicas, licença de jogo on-line atual emitida em 31 de agosto de 2017 e para clientes do Reino Unido por (2) a UK Gambling Commission - ver licença. Este site é comercializado no resto da UE, para produtos de investimento da Binary Investments (Europe) Ltd. Edifício Mompalao, Suite 2, Tower Road, Msida MSD1825, Malta, licenciado e regulado como um fornecedor de serviços de investimento de Categoria 3 pelo Malta Financial (IS70156), e para os produtos de jogos da Binary (Europe) Ltd. Edifício Mompalao, Suite 2, Tower Road, Msida MSD1825, Malta, licenciado e regulado pela (1) Malta Gaming Authority em Malta, MGACL21182000, 26 de maio de 2017 e para clientes do Reino Unido por (2) a UK Gambling Commission - ver licença. E para os clientes irlandeses por (3) o Revenue Commissioners na Irlanda, licença actual de apostas à distância emitido em 29 de setembro de 2017 (licença n º 1010285). Estes serviços de websites não são disponibilizados em determinados países, como os EUA, Costa Rica, Hong Kong, ou para pessoas com menos de 18 anos. Você atingiu o limite de taxa de solicitações por segundo. Por favor tente mais tarde. Opções de negociação binário pode não ser adequado para todos, por isso certifique-se de que você compreenda plenamente os riscos envolvidos. Suas perdas podem exceder seu depósito inicial e você não possui ou tem qualquer interesse no ativo subjacente. No que diz respeito às opções binárias que são produtos de jogo, lembre-se que o jogo pode ser viciante - por favor jogar com responsabilidade. Um par de anos atrás, o engenheiro da Netrino, Dan Smith, estava escrevendo firmware de controle de motor de passo que fazia interface com muitos registros com campos binários e subcampos. Depois de lutar um pouco com o habitual 8220off erro-propenso por 1 bit shift8221 mascaramento e conversão de binário para literais hexadecimais em C, ele aconteceu através de um post útil em um fórum. Em poucas palavras, a técnica 8220binary literal8221 envolve o seguinte conjunto de macros de pré-processador C: Macros internas definem HEX (n) 0xnLU definir B8 (x) ((xamp0x0000000FLU) 1: 0) ((xamp0x000000F0LU) 2: 0) ((xamp0x00000F00LU) (Xamp0x00F0000LU) 64: 0) ((xamp0x0000000LU) 128: 0) ((xamp0x00F0000LU) 16: 0) ((xamp0x00F00000LU) 32: 0) macros User-visible definir B8 (Dmsb, dlsb) ((unsigned short) B8 (dmsb) ltlt8) B8 (dlsb)) definem B32 (dmsb, db2, db3, dlsb) B8 (dsb) ltlt24) ((unsigned long) B8 (db2) ltlt16) ((sem sinal longo) B8 (db3) ltlt8) B8 (dlsb)) Aqui estão alguns exemplos do uso dessas macros : B8 (01010101) B16 (10101010,01010101) 43,605 B32 (10000000, 11111111,10101010,01010101) 2,164,238,933 Portanto, se você tivesse um registro de controle de 8 bits mapeado em memória do formato XXXYYZZZ (onde XXX, YY e ZZZ são Subcampos), você poderia inicializá-lo assim: preg (B8 (010) ltlt 5) (B8 (11) ltlt 3) (B8 (101) lt Lt 0)) que define os bits XXX para 010, YY para 11 e ZZZ para 101. Se eu precisar mudar XXX para 011, basta mudar um único 0 para um 1 no código-fonte, e tudo magicamente muda. Melhor de tudo, it8217s tudo feito em tempo de compilação. Nenhuma conversão propensa a erro para hexadecimal necessário, não descobrir quais bits pertencem a que nibbles, etc Esta entrada foi postada na quarta-feira, 30 de setembro de 2009 às 7:08 pm e é arquivada sob Uncategorized. Você pode seguir qualquer resposta a esta entrada através do feed RSS 2.0. Você pode deixar uma resposta. Ou trackback de seu próprio site. 12 Responses to 8220Binary Literals in C8221 Nigel Jones diz: Great post (ou talvez roubar :-)). Eu sempre quis uma maneira de expressar números binários em C, e agora eu tenho um eu peguei o código e experimentei um pouco com ele. Se você ativar a otimização completamente off, eles meu compilador IAR ARM fez incluir algum código redundante. No entanto, o nível mais baixo de otimização corrigido esse problema. O verificador de conformidade MISRA obviamente teve um ajuste absoluto sobre o uso dessas macros, gerando um grande número de queixas. Eu penso que este é mais um exemplo onde um tem que fazer um comércio inteligente fora. Devo usar uma macro que é inseguro por padrões MISRA, mas permite-me eliminar uma classe inteira de erros Talvez em meu tempo livre copioso veremos se eu posso reestruturar as macros para tornar possível a compatibilidade MISRA. A conformidade MISRA permite exceções para exatamente este tipo de coisa Isso está tornando seu código mais seguro e não menos seguro: As macros encapsulam individualmente construções inseguras, mas empacotá-los com uma interface muito segura. Você só precisa de um desvio de projeto MISRA especializado para estas três macros E você pode manter a plena conformidade MISRA, tanto no espírito e na letra da lei. Diferentes verificadores MISRA lidar com desvios de maneiras diferentes, mas PC-Lint manipula macro-desvios específicos muito bem, por exemplo. I39m tentando aprender os pontos mais finos de C e como ser criativo com ele. ) Eu não entendo alguma coisa das macros binárias. 821282128212821282128212821282128212 - Função de conversão de 8 bits defina B8 (x) ((xamp0x0000000FLU) 1: 0) (: xamp0x0000F00LU) 2: 0) (xamp0x0000F00LU) 4: 0) 0 (xamp0x00F00000LU) 32: 0) ((xamp0x0F000000LU) 64: 0) ((xamp0xF0000000LU) 128: 0) 8212821282128212821282128212821282128212 Se tomarmos parte da primeira linha: (xamp0x0000000FLU) Parece-me que x está sendo anded Com a constante 0x0000000FLU. Its com esta constante que eu me perco. Para mim 0x0000000F 15 (em decimal). O quotLUquot como I underatand-lo, e eu poderia estar errado, significa que a constante é um Unsigned Long. Eu entendo como a macro é suposto para trabalhar. Meu problema, eu acho que é com a sintaxe. Pode alguém derramar alguma lightThanks, Kennykenlanspach Nigel Jones diz: Claro que pode. A título de exemplo, vamos olhar para B8 (1011). Primeiro a macro HEX converte o argumento 1011 em 0x1011UL. Ele faz isso através do operador stringize. (Esta é uma parte bastante obscura do preprocessor 8211 você encontrará mais informações online). Agora vamos ver o que acontece com a macro B8 (x). Consiste em 8 linhas, cada uma das quais efetivamente testa uma posição de bit. A primeira linha é (x amp 0x0000000Flu). 1. 0. (Observe que I39ve acrescentou espaços e fez o LU maiúsculas e minúsculas, tornando as coisas um pouco mais claro IMHO). De qualquer forma, isso se torna: 0x1011ul amp 0x0000000Ful 0x1. Isso evidentemente é avaliado como verdadeiro e, portanto, o operador ternário retorna 1. A segunda linha da macro B8 () é (x amp 0x000000F0lu). 2. 0). Assim, esta expansão para 0x1011 amp 0x000000F0 0x10. Isso evidentemente é avaliado como verdadeiro e então o operador ternário retorna 2, que é adicionado ao resultado anterior, dando um total de decimal 3. A terceira linha da macro B8 () é (x amp 0x00000F00lu). 4. 0). Assim, este expande para 0x1011 amp 0x00000F0 0x0. Isto evidentemente é avaliado como falso e então o operador ternário retorna 0, que é adicionado ao resultado anterior, mantendo o nosso total em decimal 3. A quarta linha da macro B8 () é (x amp 0x0000F000lu). 8 0). Assim, isso se expande para 0x1011 amp 0x0000F000 0x1000. Isso evidentemente é avaliado como verdadeiro e então o operador ternário retorna 8, que é adicionado ao resultado anterior, dando um total de decimal 11 8211 e nosso resultado final. As macros B16 e B32 simplesmente baseiam-se nessa técnica usando moldes e mudanças apropriados. Espero que isto ajude. Se não postar novamente e I39ll tentar expandir sobre a explicação. Miro Samek diz: De fato, o verificador MISRA não gosta particularmente das macros, porque eles violam as seguintes regras MISRA: macro HEX (n) Violates MISRA Requisito Regra 98, Uso múltiplo de 3939 operadores em macro definitionmacro B8 Violates MISRA Rule 7, Trigraphs shall Não pode ser usado macro B8 viola a regra MISRA 96, macro de expressão-como 3939 não parenthesizedBut as macros podem ser reestruturados como segue para cumprir MISRA: define HEX (n) ((uint32t) 0xn) define B8 (x) amp 0x1LU) ((x) amp 0x10LU) gtgt 3) ((x) amp 0x100LU) gtgt 6) ((x) amp 0x1000LU) gtgt 9) ((x) amp 0x10000LU) (0x100000LU) gtgt 15) ((x) amp 0x1000000LU) gtgt 18) ((x) amp 0x10000000LU) gtgt 21)) definem B16 (b0) ((uint8t) B8 B1, b0) (Bn (bx) (B8 (HEX (b0)) (B8 (HEX (b1)) ltlt 8))) definem B32 (b3, b2, b1, b0) ) B8 (HEX (b1)) ltlt 8) (B8 (HEX (b2)) ltlt 16) (B8 (HEX (b3)) 24))) Embora as macros sejam compatíveis com MISRA, para Violando MISRA regra 19 (octal constante usado), se você iniciar seu binário literal com um zero. Miro Samek Não há trigraphs neste código. Parece que o seu verificador MISRA é um pouco demasiado gatilho feliz (todos eles são). Após a inspeção manual do código, eu posso detectar as seguintes violações MISRA: uso de macros funcionais (19.7), apenas uma ocorrência em uma macro (19.12), não deve ser usado (19.13), sufixo U exigido em literais inteiros (10.6 ), Não devem ser usadas conversões de tipo implícitas (10.1), literais de número inteiro octal (7.1), uintnt deve ser usado em vez dos tipos de dados inteiros padrão (6.3), C99 não deve ser usado (1.1). 8230 tópicos, se você não leu Mike Barr8217s postagem recente em literais binários, então eu recomendo fortemente que você faça isso. Teria cabido muito agradàvel em 8230 que eu nunca compreendeu inteiramente a necessidade de literals binários. De volta à escola, eles não nos deixariam escrever nosso primeiro mundo de aliança antes que soubéssemos binário e hexadecimal. Eu acho que você deve ser capaz de assumir com segurança que cada programador pode ler hex. Além disso, penso pessoalmente que é muito mais difícil ler que preg (B8 (010) ltlt 5) (B8 (11) ltlt 3) (B8 (101) ltlt 0)) é muito mais difícil de ler do que preg (5ltlt0) ), Para não mencionar preg XYZ onde XYZ são constantes da máscara do bocado. Em uma aplicação real, aquelas máscaras do bocado naturalmente teriam nomes significativos preferivelmente. B32 (11111100, 11000000, 11000000, 11111100), B32 (11000000, 11000000, 11000000, 00000000) obviamente é uma imagem de carácter 8216F8217. Que você wouldn8217t ver se ele foi escrito 82200xFCC0C0FC, 0xC0C0C0008221. Peter Painter diz: É claro que doesn8217t faz sentido nos exemplos que você dá. No entanto, às vezes um padrão de bits é exatamente isso: um padrão. Imagine dados de fonte. Se escrito como literais binários, você pode 8216see8217 letras fonte (e quaisquer erros), enquanto os valores hexadecimais são letras sem sentido. Sempre que um valor representa algum padrão visual, literais binários são uma ajuda inestimável. Na verdade, esse é meu principal uso para literais binários. Julian Day diz: Hmm, I8217m não tenho certeza se eu gosto destes ou não. Ao trabalhar em CC, I8217m muito usado para não ter literais numéricos binários e de repente ver isso me lança um pouco. Ao trabalhar em Ada e em outras línguas com literais numéricos binários, dificilmente me lembro de usá-los ou vê-los usados. Estaria interessado em ver um argumento forte para usá-los, já que concordo com Lundin acima do exemplo do preg, mas usaria uma macro ou const para cada um dos campos em vez de literais numéricos. De qualquer forma, a partir de uma perspectiva MISRA 2004, eu acho que o maior obstáculo é a regra 13.7, que afirma que 8220As operações booleanas cujos resultados são invariantes não serão permitidas.8221 Isso é o ponto inteiro dessas macros, para aproveitar essa invariância para gerar Um literal numérico a partir desta representação binária em tempo de compilação. Você pode colocar avisos de desativação sobre as definições de macro e fazer as expansões tipo MISRA compatível, mas você precisaria garantir que 13.7 não está em vigor no ponto onde a macro é expandida, uma vez que a expansão propriamente dito não é MISRAble, se esse for o Adjetivo correto. Para referência, here8217s uma versão da macro que poderia ser usado com o compilador GHS8217s construído em regras de verificação: ifndef BINH definir BINH pragma ghs startnomisra definir HEX (n) 0xnLU definir B8 (x) (uint8t) ((xamp0x0000000FLU) 0UL ) 1UL: 0UL) (((xamp0x000000F0LU) 0UL) 0UL) 0UL) ((xamp0x0000F00LU) 0UL) ((xamp0x0000F000LU) 0UL) ((Xamp0x00F00000LU) 0UL)) () () () As macros User-visible definem B8 (d) ((uint8t) B8 (HEX ((xamp0x00F00000LU 0UL) D))) definem B16 (dmsb, dlsb) ((uint16t) (Bn (dmsb) ltlt8) ((uint16t) B8 (dlsb)))) definem B32 (dmsb, db2, db3, dlsb) O compilador GHS avaliaria as expressões binárias como o literal numérico equivalente em qualquer nível de otimização, o que, afinal de contas, É o ponto deles. Julian Day diz:
Comments
Post a Comment