O que os diferentes comandos binários fazem?
Este submenu contém comandos que processam imagens binárias (preto e branco). Esses comandos assumem que, por padrão, os objetos são pretos e o plano de fundo é branco. Veja este FAQ sobre como definir o padrão para fundo preto e objetos brancos.
Faça binário
Converte imagens em imagens em preto e branco. O nível de limite é determinado analisando o histograma da seleção atual ou da imagem inteira, se não houver seleção. Veja esta FAQ descrevendo o algoritmo usado.
Se a ferramenta Image & gt; Adjust & gt; Threshold estiver ativa, será exibida uma caixa de diálogo que permitirá especificar quais pixels estão definidos para a cor do plano de fundo e qual a cor do primeiro plano e se o plano de fundo é preto e se o branco é branco.
[por favor atualize o acima pode não estar totalmente correto]
Com pilhas, todas as imagens na pilha são convertidas em binário usando o limite calculado da fatia atualmente exibida. Use a macro ConvertStackToBinary para converter uma pilha em binário usando limites calculados localmente.
Converta em Máscara.
Converte imagens em imagens em preto e branco com base nas configurações de limite atuais. Por padrão, a máscara terá uma LUT invertida (preto é 255 e branco é 0), mas cria máscaras de fundo preto (0) se “Black Background” estiver marcado na caixa de diálogo Processar> Binário & gt; Opções.
[por favor atualize, o anterior pode não estar totalmente correto]
Encontre o Maxima.
Determina os máximos locais em uma imagem e cria uma imagem binária (semelhante a máscara) do mesmo tamanho com os máximos, ou uma partícula segmentada por máximo, marcada. Para imagens RGB, máximos de luminância são selecionados, com a luminância definida como média ponderada ou não ponderada das cores, dependendo das configurações de Editar & gt; Opções & gt; Conversões. Este comando é baseado em um plugin contribuído por Michael Schmid.
Uma caixa de diálogo é exibida com as seguintes opções:
Tolerância ao ruído - Os máximos são ignorados se não se distinguirem do ambiente mais do que este valor (unidades calibradas para imagens calibradas). Em outras palavras, um limite é definido no valor máximo menos a tolerância a ruído e a área contígua ao redor do máximo acima do limite é analisada. Para aceitar um máximo, esta área não deve conter nenhum ponto com um valor maior que o máximo. Apenas um máximo dentro desta área é aceito.
Máxima Dentro da Tolerância - Cria uma imagem de saída com todos os pontos dentro da “Tolerância ao Ruído” para cada máximo.
Partículas segmentadas - parte do princípio de que cada máximo pertence a uma partícula e segmenta a imagem por um algoritmo de bacias hidrográficas aplicado aos valores da imagem (em contraste com Process & gt; Binary & gt; Watershed, que usa o mapa de distância Euclidiano).
Seleção de pontos - Exibe uma seleção de vários pontos com um ponto em cada máximo; não produz uma imagem de saída separada.
Contar - Exibe o número de máximos na janela Resultados; produz nenhuma imagem de saída.
Exclude Edge Maxima - Exclui maxima se a área dentro da tolerância ao ruído em torno do máximo tocar a borda da imagem (a borda da seleção não importa).
Fundo claro - Permite o processamento de imagens com fundo claro e objetos escuros.
Acima do limite inferior - (esta opção aparece apenas para imagens limitadas) Localiza máximas acima apenas do limite inferior. O limite superior da imagem é ignorado. Se Partículas segmentadas for selecionada como Tipo de saída, a área abaixo do limite inferior será considerada um plano de fundo. Esta opção só funciona quando se encontra maxima do valor de pixel no sentido matemático, ou seja, fundo escuro e LUT não invertido ou fundo brilhante e inversão de LUT.
Seleção do ponto de pré-visualização - Exibe o máximo com os parâmetros atuais como uma seleção multiponto sobreposta na imagem. Se esta opção estiver marcada, o número de máximos encontrados também é exibido na caixa de diálogo.
Para os tipos de saída Pontos Únicos, Máxima Dentro da Tolerância e Partículas Segmentadas, saída é uma imagem binária, com primeiro plano 255 e fundo 0, usando uma LUT invertida ou normal dependendo da opção Fundo Preto em Processar> Binário & Opções. O número de partículas (conforme obtido por Analyze Particles) na imagem de saída não depende do tipo de saída selecionado. Note que Partículas Segmentadas geralmente resultarão em partículas tocando a borda se Excluir Margem Máxima estiver selecionado. Exclude Edge Maxima aplica-se ao máximo, não à partícula.
Encontre o Maxima aplicado a uma imagem barulhenta com diferentes opções (Excluir Edge Maxima selecionado).
Encontre o Maxima não funciona em pilhas, mas a macro FindStackMaxima o executa em todas as imagens de uma pilha e cria uma segunda pilha contendo as imagens de saída.
Substitui cada pixel pelo valor mínimo (mais leve) na vizinhança 3 & tempos; 3. Com imagens binárias, remove pixels das bordas de objetos pretos.
Substitui cada pixel pelo valor máximo (mais escuro) na vizinhança 3 & tempos; 3. Com imagens binárias, adiciona pixels às bordas de objetos pretos.
Executa uma operação de erosão, seguida de dilatação. Com imagens binárias, isso suaviza objetos e remove pixels isolados.
Executa uma operação de dilatação, seguida de erosão. Com imagens binárias, isso suaviza objetos e preenche pequenos furos. O comando tem um hífen residual para diferenciá-lo de “fechar arquivo”.
Exibe uma caixa de diálogo que permite que várias configurações usadas pelos comandos no submenu Binário sejam alteradas.
Iterações especifica o número de vezes que erosão, dilatação, abertura e fechamento são realizadas.
Contagem especifica o número de pixels de fundo adjacentes necessários antes que um pixel seja removido da borda de um objeto durante a erosão e o número de pixels de primeiro plano adjacentes necessários antes que um pixel seja adicionado à borda de um objeto durante a dilatação.
Verifique o fundo preto se a imagem tiver objetos brancos em um fundo preto.
Se a opção Bordas do bloco quando a erosão estiver marcada, Processar> Binário & gt; Erode não será erodido a partir das bordas da imagem. Essa configuração também afeta o Processo & gt; Binário & gt; Fechar, que é eliminado das bordas, a menos que essa caixa de seleção esteja marcada.
A saída de EDM determina o tipo de saída para os comandos Processar & gt; Binário & gt; Distância do mapa, Pontos finais e Voronoi. Defina para sobrescrever a saída de 8 bits que sobrescreve a imagem de entrada; 8 bits, 16 bits ou 32 bits para imagens de saída separadas. Saída de 32 bits tem resolução de distância de ponto flutuante (subpixel).
Gera um contorno amplo de um pixel de objetos em primeiro plano (preto) em uma imagem binária. A linha é desenhada dentro do objeto, ou seja, em pixels de primeiro plano anteriores.
Esqueletizar.
Repetidamente remove pixels das bordas de objetos em uma imagem binária até que eles sejam reduzidos a esqueletos de um único pixel. Os objetos são assumidos como preto e branco como plano de fundo. Note que existem muitos algoritmos esqueletizantes.
Mapa de distância.
Gera um mapa de distância euclidiano (EDM). Cada pixel de primeiro plano na imagem binária é substituído por um valor de cinza igual à distância desse pixel do pixel de fundo mais próximo. Use Process & gt; Binary & gt; Opções para definir a cor de fundo (preto ou branco) e o tipo de saída; Ao selecionar substituir ou saída de 8 bits, observe que as distâncias maiores que 255 são rotuladas como 255.
Pontos finais.
Gera os pontos finais erodidos (UEPs) do EDM. Requer uma imagem binária como entrada. Os UEPs representam os centros de partículas que seriam separados por segmentação. O valor cinzento da UEP é igual ao raio do círculo inscrito da partícula correspondente. Use Processar> Binário & gt; Opções para definir a cor de fundo (preto ou branco) e o tipo de saída.
A segmentação de bacias hidrográficas do mapa de distância euclidiano (EDM) é uma maneira de separar ou cortar automaticamente as partículas que se tocam (a separação de bacias hidrográficas de uma imagem em escala de cinza está disponível por meio do comando Localizar máximas). O comando Watershed requer uma imagem binária contendo partículas pretas em um fundo branco. Primeiro, calcula o mapa de distância euclidiano e encontra os pontos finais erodidos (UEPs). Em seguida, dilata cada um dos UEPs (os picos ou máximos locais do EDM), tanto quanto possível - até que a borda da partícula seja atingida, ou a borda da região de outro UEP (crescente). A segmentação de bacias hidrográficas funciona melhor para objetos convexos suaves que não se sobrepõem em demasia.
Aqui está uma animação que mostra como funciona a segmentação de bacias hidrográficas.
Divide a imagem por linhas de pontos tendo igual distância às bordas das duas partículas mais próximas. Assim, a célula de Voronoi de cada partícula inclui todos os pontos que estão mais próximos desta partícula do que qualquer outra partícula. Para o caso das partículas serem pontos únicos, esta é uma tesselação de Voronoi (também conhecida como tesselação de Dirichlet).
Na saída, o valor dentro das células de Voronoi é zero; os valores de pixel das linhas divisórias entre as células são iguais à distância das duas partículas mais próximas. Isso é semelhante a uma transformação do eixo medial do plano de fundo, mas não há linhas nos orifícios internos das partículas. Escolha o tipo de saída ("Overwrite", "8-bit", "16-bit" ou "32-bit") e cor de fundo (preto ou branco; aplica-se a entrada e saída) na caixa de diálogo Processar> Opções binárias & gt; caixa.
SubnetOnline.
& quot; Sua calculadora de sub-rede IP online e coleção de ferramentas de rede. & quot;
Mais tutoriais.
Etapa 3: máscara de sub-rede.
Se você concluiu as etapas 1 e 2, agora sabe que cada endereço IP consiste em 4 octetos, 8 bits cada e que cada endereço IP, dependendo da classe, é separado em uma parte de rede e uma parte de hosts.
0 10000000 255.128.0.0 Sub-rede inválida.
2 11000000 255.192.0.0 4.194.302.
6 11100000 255.224.0.0 2.097.150.
14 11110000 255.240.0.0 1.048.574.
30 11111000 255.248.0.0 524.286.
62 11111100 255.252.0.0 262.142.
126 11111110 255.254.0.0 131,070.
254 11111111 255.255.0.0 65.534.
0 10000000 255..255.128.0 Sub-rede inválida.
2 11000000 255.255.192.0 16.382.
6 11100000 255.255.224.0 8,190.
14 11110000 255.255.240.0 4.094.
30 11111000 255.255.248,0 2,046.
62 11111100 255.255.252.0 1.022.
126 11111110 255.255.254.0 510.
254 11111111 255.255.255.0 254.
0 10000000 255.255.255.128 Sub-rede inválida.
2 11000000 255.255.255.192 62.
6 11100000 255.255.255.224 30.
14 11110000 255.255.255.240 14.
30 11111000 255.255.255.248 6.
62 11111100 255.255.255.252 2.
126 11111110 255.255.255.254 Sub-rede inválida.
254 11111111 255.255.255.255 Sub-rede inválida.
Todas as classes diferentes contêm um ou mais comentários de sub-rede inválidos. Essas opções são inválidas porque, quando usadas, dariam todos ou todos os zeros. Todos ou todos os zero não são possíveis, porque quando ANDed, eles não deixam nenhuma sub-rede, ou nenhum host. Tente E uma das opções de sub-rede inválida e veja o que acontece.
Toppan Photomasks, Inc.
Máscaras binárias avançadas.
A Toppan é líder na fabricação de máscaras binárias avançadas e de alta qualidade em todas as regiões do mundo. Nosso avançado processo de gravação a seco binário fornece uniformidade superior de CD e Registro, melhores perfis de parede lateral cromados, maior fidelidade de imagem e a opção de usar OPC sofisticado. Compartilhamos continuamente as melhores práticas entre nossas fábricas para eliminar defeitos e agilizar nossa fabricação. Esses esforços contínuos proporcionam melhorias nos rendimentos de wafer e no desempenho do produto para nossos clientes.
A Família Avançada de Fotografia Fotográfica Binária.
As photomasks binárias avançadas estão disponíveis principalmente em substratos de quartzo de 6 "com especificações que podem ser totalmente personalizadas para atender às suas necessidades específicas. Alguns de nossos tamanhos e grupos de especificações mais comuns estão listados abaixo.
Recursos do OPC.
Nossas Máscaras Binárias Avançadas suportam uma ampla gama de técnicas de OPC que compensam uma variedade de efeitos de proximidade, incluindo contatos ou buracos fechados, linhas encurtadas ou arredondadas, não-uniformidade de densidade padrão local, efeitos topográficos e muitos outros fenômenos limitantes. Adicionar recursos do OPC a nossas máscaras de alta qualidade praticamente elimina os efeitos de proximidade e resulta em melhor resolução e latitude de processo. Como o OPC é aplicado aos dados do padrão antes de ser impresso na máscara, trabalharemos de perto com suas equipes para desenvolver o produto perfeito para suas necessidades.
Fabricação de máscaras fotográficas binárias.
Aproveitamos nossa Rede Global de Manufatura para construir e entregar suas máscaras fotográficas praticamente em qualquer lugar. À medida que as empresas separaram seus grupos de design de seus grupos de produção, a Toppan concentrou-se em fornecer opções flexíveis para oferecer a melhor experiência possível. Temos mais do que apenas a flexibilidade e experiência para enviar localmente, regionalmente e internacionalmente. Nossa Rede Global também nos permite trabalhar de perto com o designer e o fabricante, não importa o quão distantes eles estejam.
Temos mais de 100 anos de experiência em impressão e construímos nossa reputação em um cliente por vez. Mantemos nosso foco em você, porque o nosso sucesso está ligado ao seu.
Toppan Photomasks, Inc.
Máscaras Binárias Padrão.
As máscaras binárias padrão continuam a ser o nosso produto mais utilizado. Apesar da tendência para opções mais avançadas de fotomáscara, como OPC Masks, Phase Shift Masks e OMOG, aproximadamente 70% dos nossos clientes de fotomáscara continuam a usar nossos produtos binários para todas as suas necessidades de fabricação.
A Família Binary Photomask.
As máscaras fotográficas binárias estão disponíveis com especificações que podem ser totalmente personalizadas para atender às suas necessidades específicas. Alguns de nossos tamanhos e grupos de especificações mais comuns estão listados abaixo.
Fabricação de máscaras fotográficas binárias.
Aproveitamos nossa Rede Global de Manufatura para construir e entregar suas máscaras fotográficas praticamente em qualquer lugar. À medida que as empresas separaram seus grupos de design de seus grupos de produção, a Toppan concentrou-se em fornecer opções flexíveis para oferecer a melhor experiência possível. Temos mais do que apenas a flexibilidade e experiência para enviar localmente, regionalmente e internacionalmente. Nossa Rede Global também nos permite trabalhar de perto com o designer e o fabricante, não importa o quão distantes eles estejam.
Temos mais de 100 anos de experiência em impressão e construímos nossa reputação em um cliente por vez. Mantemos nosso foco em você, porque o nosso sucesso está ligado ao seu.
Números binários e máscaras de sub-rede.
Gary C. Kessler.
Uma versão editada deste artigo apareceu como uma barra lateral do artigo "Hanging Out With the Classless Crowd", de W. Heldman, com o título "Números binários e máscaras de sub-rede" na Windows 2000 Magazine, janeiro de 2001.
Para realmente entender como derivar máscaras de IP e aplicá-las aos endereços, você deve entender os números binários e convertê-los em decimais.
Vamos começar com algo com o qual estamos todos muito confortáveis, ou seja, números decimais (base 10). Quando éramos crianças, aprendíamos que cada dígito em um número decimal representava uma potência diferente de 10. O número 7836, por exemplo, é interpretado da seguinte forma:
Isso é simplista, admito, mas entender isso é a base para entender qualquer base numérica. Em particular, isso nos ajudará a entender o binário (base 2).
Nós interpretamos os números binários exatamente da mesma maneira que os números decimais, exceto que cada coluna de um número binário representa uma potência diferente de 2 em vez de 10. Podemos facilmente converter um número binário em um valor decimal mais compreensível. Vamos primeiro revisar os poderes de 2 (nós iremos apenas até o ponto necessário para um byte de 8 bits porque os endereços IP possuem bytes de 8 bits).
Dadas essas informações, podemos converter o número binário 11010011 em decimal da seguinte maneira.
Agora, podemos aplicar o que sabemos sobre números binários a endereços IP e máscaras de sub-rede. Os endereços IP são de 32 bits ou quatro bytes de 8 bits de comprimento. Enquanto o computador armazena o endereço IP em binário, normalmente usamos a notação decimal pontuada para escrever endereços, porque achamos mais fácil ler. A notação decimal pontuada nos permite examinar um endereço IP um byte de cada vez. No endereçamento "classful" padrão, os endereços da Classe A dedicam 1 byte à ID da rede e 3 bytes à ID do host, os endereços da Classe B dedicam 2 bytes à ID da rede e 2 bytes à ID do host e os endereços da Classe C a 3 bytes para o ID de rede e 1 byte para o ID do host.
O objetivo de uma máscara de sub-rede é fornecer IP, protocolos de roteamento e qualquer outro software que tenha que lidar com endereços de uma maneira em que o NET_ID e o HOST_ID possam ser determinados. Máscaras de sub-rede, como o próprio endereço IP, têm 32 bits de comprimento. As máscaras de sub-rede são compostas de um número de bits de 1 bit seguido por 0 bits suficientes para formar um valor de 32 bits, onde as posições de bit com 1 correspondem às posições de bit no endereço IP que fazem parte do NET_ID. Com o endereçamento classful, a máscara de sub-rede terá 8, 16 ou 24 bits para os endereços das Classes A, B e C, respectivamente. No jargão do mascaramento de sub-rede, essas máscaras seriam de 8, 16 ou 24 bits de comprimento, mas isso é um equívoco; realmente se refere apenas ao número se um bit, já que as máscaras realmente têm 32 bits de comprimento.
O mascaramento de sub-rede de comprimento variável (VLSM) é essencial para dar suporte ao endereçamento sem classes. O VLSM nos permite construir máscaras que são de praticamente qualquer tamanho e não estão restritas aos limites de bytes do endereçamento de classes. Dessa maneira, podemos agregar muitos NET_IDs em uma única entrada em uma tabela de roteamento ou podemos segmentar um endereço da Classe C, por exemplo, em vários subendereços.
Vamos começar com um exemplo simples. Suponha que tenhamos o endereço de classe C 192.168.18.55 com a máscara de sub-rede de classe C de 24 bits regular 255.255.255.0. Em binário, o endereço (com espaços inseridos para legibilidade) é:
11000000 10101000 00010010 00110111.
e a máscara é.
11111111 11111111 11111111 00000000.
É fácil para nós olharmos para isto através de análise e ver que os bytes de todos referem-se à porção de ID de rede do endereço e podemos ver que o NET_ID é 192.168.18 (o que nós meio que sabíamos de qualquer maneira porque os primeiros três bytes de uma classe C são o NET_ID). Na notação VLSM e Classless Inter-Domain Routing (CIDR), a máscara seria denominada / 24 ("slash-24"), porque há 24 bits na máscara.
Mas como isso realmente funciona? Quando o software precisa determinar a porção NET_ID desse endereço (para fins de roteamento, por exemplo), a máscara de sub-rede de 32 bits é logicamente AND com o endereço de 32 bits, resultando que qualquer bit de endereço correspondendo a um bit de 1 na máscara de sub-rede mantém seu valor (0 ou 1) e qualquer bit de endereço correspondente com um bit de 0 na máscara de sub-rede é forçado para 0. Então, vamos realizar essa operação para o endereço de classe C e máscara acima:
Depois de realizar este cálculo, o software agora sabe que o NET_ID é 192.168.18.0.
Vamos agora tentar um exemplo mais amplo. Como as máscaras são criadas escrevendo-se um número de zeros seguidos de zeros, um byte all-ones terá o valor 255 e um byte all-zeros terá o valor 0, como mostrado acima. Mas uma VLSM pode não ter uma máscara que caia em um limite de bytes, portanto um dos bytes pode ter um valor diferente de 0 ou 255. Na verdade, um byte de 8 bits tem apenas oito valores possíveis de sub-rede à medida que aumentamos o número de um pedaços da esquerda:
Apenas outro blog WordPress.
Pós-navegação.
Um Quick Bitmask HOWTO para programadores.
Aviso: Material altamente Geeky segue.
Atualmente, estou trabalhando em um grande banco de dados para um cliente. Eu estou realmente refazendo uma versão ruim do banco de dados em uma máquina normalizada. Eu encontrei um problema recentemente em que alguns dos valores são armazenados como bitmasks. Eu sabia o que era uma máscara de bits, mas geralmente os considerava como magia vodu deixada para hackers C loucos. Até agora. Entrei em contato com meu mentor de voodoo crazy C hacker, Jeremy Brand, e perguntei-lhe como eles funcionavam.
Aqui está um tutorial rápido:
em vez de contar 0, 1, 2, 3, 4, 5 e # 8230; você poderia com poderes de 2.
Quando você lable algo com um desses poderes de dois, você pode.
adicione-os a outros poderes de 2 e depois divida o que.
você começou de novo.
A soma dos seus identificadores é 7 (vamos chamar isso de $ soma).
Então, mais tarde, você pode verificar 7 para ver o que está em sua cesta:
faz $ sum mod 4 igual a 0? (então não há maçã no carrinho)
o $ sum mod 2 é igual a 0? (então não há laranja no carrinho)
O $ sum mod 1 email 0? (então não há banana no carrinho)
O uso de bitmasks não é necessariamente mais fácil de usar, mas é rápido.
É rápido porque os computadores já falam em bits. Este exemplo
está usando memória de 3 bits. Normalmente você terá 16 opções (como eu.
tem 3 aqui) por causa do tamanho de um inteiro. Se você tiver sorte.
você estará usando C ou até mesmo o mysql que pode acessar todos os 32 bits de um.
inteiro, então você terá 32 opções.
A razão pela qual os computadores usam base-2 para começar é porque.
com hardware de armazenamento, há realmente apenas dois estados: ligado e desligado.
Quanto mais unidades individuais você puder armazenar, mais e mais.
armazenamento que o dispositivo pode ter.
FYI, você pode usar o google para sua calculadora:
Finalmente, isso faz sentido. Ainda estou completamente perdido com a matemática que entra em ação (o que me irrita), mas consegui fazer um programa de prova de conceito funcionar, o que pode ajudar outros programadores com deficiência de máscara de bits por aí:
O truque é o & amp; Se o resultado for 0 (zero), o valor da bitmask única não estará presente na soma da bitmask. Tenho certeza de que isso tem algo com o fato de você não poder adicionar nenhuma lista separada de valores únicos de bitmask e obter a mesma soma duas vezes (ou seja, 1 + 2 + 4 = 7, 2 + 4 + 8 = 14). Mais uma vez, eu apenas sei que funciona [tm] & # 8221 ;. Espero que isso ajude alguém lá fora.
Estou fazendo cache disso principalmente aqui, então, da próxima vez que minha mente retardada não puder se envolver com os bitmasks, eu posso voltar ao meu próprio site. Se você tiver dúvidas sobre isso, não me envie um e-mail porque eu ainda acho que os homens verdes fazem esse truque matemático & # 8221; trabalhos. Porra, eu gostaria de ter obtido um diploma de Ciência da Computação em vez de um Computer Info. Sys grau.
16 pensamentos sobre & ldquo; Um Quick Bitmask HOWTO para programadores & rdquo;
Finalmente! Eu vi muitas vezes, mas não pude descobrir o nome, obrigado.
Você ajudou pelo menos um codificador deficiente de bitmask 🙂
Eu não posso acreditar nos tipos de pessoas que se chamam programadores hoje em dia. E os gerentes não sabem; para eles, qualquer um que possa lançar palavras de ordem deve saber o que eles estão fazendo. E, portanto, a enorme quantidade de sistemas de software amadores de baixa qualidade, abaixo do padrão, com pouca documentação e um design ainda pior. Você senhor, é um idiota, e eu odeio o seu tipo.
Você não tem IDEA que tipo de programador eu sou. Antes de disparar sua boca, você provavelmente deveria ter tempo para me conhecer. Só porque eu não sabia o que era um bitmask (ou como efetivamente usá-lo) não significa que eu não sou bom com SQL, OOP, etc. Pelo menos eu tomei para mim aprenda a usá-los e reconheça o fato de que eles são uma solução mais elegante para muitos problemas.
Que tal você se deparar com alguém por tentar aprender como ser um programador melhor? Você, senhor, é um idiota e eu te odeio.
Eu acho que a idéia de bitmasks é algo que nem todo mundo tem que saber. Você pode desenvolver aplicativos por anos e nunca se deparar com uma necessidade deles, especialmente quando não estiver usando bancos de dados.
Máscaras de bits são úteis, mas onde eu começo a ficar nervoso são pequenas mudanças, por ex. em Java. Eles são ainda mais estranhos (e eu acho que o código tende a ficar muito ilegível).
Comparações Aren´t Integer sempre transformadas em bitmasks por um compilador decente?
Então, ao invés de dissecar alguém, como eu posso ser útil? A matemática que você está procurando por trás de tudo isso é incrivelmente simples. O problema é que, para alguns, eles não falam binário. Suponha que tenhamos quatro bits. Não bytes, bits. Então, alinhe-as e elas ficarão assim:
Olhando para esse padrão, você notará que o 1 está movendo um espaço para a esquerda (portanto, bit shift) para cada novo valor.
OK, agora vamos falar sobre & # 8220; e & # 8221; - los. Bitwise & # 8220; e & # 8221 ;. O que isso significa? Bem, se você comparar dois números * binários * como:
0010 = 4 decimal.
0011 = 5 decimal.
Olhe para o número mais à direita de cada conjunto de bits. O topo é 0 e o inferior é 1. Existem apenas duas regras para lembrar:
Lembre-se desta matemática binária (base 2), não matemática decimal (base-10), e nós não usamos & bit-bit e (& # 038;) & # 8221; em matemática decimal, apenas operadores como (+, -, /, x,% entre outros).
Então & # 8220; e & # 8221; cada coluna de bits e você obtém o resultado:
0011 = 5 decimal.
0010 = 4 decimal.
0010 = 4 decimal = resultado.
Que bem isso faz? Bem, assim como sua cafeteira, você acabou de criar um filtro. Imagine se fosse assim:
0011 = 5 decimal = direitos de acesso de um usuário & # 8217; s & # 8220; & # 8221 ;.
0010 = 4 decimal = A permissão necessária para acessar esta página.
Pergunta de $ 60 000: Se o usuário chegar a esta página, ele verá a página?
Mas sim!! O segundo bit é definido em seus direitos de acesso & # 8220; & # 8221 ;.
Espero que ajude.
Btw. Eu trabalhei em software há muito tempo, incluindo alguns projetos reconhecidos mundialmente (NFS: Underground, por exemplo). Eu aprendi, se alguém tem atitude, vai junto com a insegurança. Os melhores e mais inteligentes são fáceis de lidar, acessíveis e sempre prontos para aprender. Ninguém sabe tudo sobre tudo.
Ainda assim, tenho duas sugestões:
a) Você deve bit a bit OU (|) os valores para compor a máscara de bits, ao invés de adicionar (apenas por razões históricas;));
b) Para testar, você deve ter um valor AND bit a bitwise com um valor e, em seguida, comparar com o mesmo valor que está sendo testado (em vez de 0);
Suponha que você tenha a seguinte máscara de bits:
1010 & # 8211;> bitmask (10 em decimais)
E você quer testar:
0110 & # 8211;> valor (6 em decimal)
Se você for bit a bit E (& # 038;) os dois, você terá:
0010 & # 8211;> bitmask & # 038; valor (2 em decimal)
Qual é maior que zero, yelding TRUE. No entanto, o valor do teste não está dentro do bitmask.
Portanto, seu script funciona se os valores que estão sendo testados forem potências de 2, mas falharem de outra forma.
Você poderia facilmente torná-lo completo testando o mesmo valor, da seguinte forma:
function testbitmask ($ value, $ bitmask)
if (($ value & # 038; $ bitmask) == $ value) retorna TRUE;
Esta função funciona se o seu bitmask é composto de potências de 2, ou qualquer outra combinação de números.
Note que há uma razão para os bitmasks serem feitos de poderes de dois. No exemplo dado, o bitmask 1010 deve representar os valores 2 (0010) e 8 (1000), OR juntos.
Se você adicionar 10 (que é 1010 em binário) ao bitmask, você obterá & # 8230; 1010! Como então você poderia saber se o bitmask contém 2, 8 ou 10? Bem, você não poderia.
Para evitar esse problema, você só deve usar potências de dois em sua máscara de bits, pois esses números deslocam um bit para a esquerda sequencialmente, da seguinte forma:
Mas desde que em algumas situações é útil usar outros números (você pode, se você for cuidadoso), seus scripts devem estar prontos .. 🙂
Espero que isto ajude!
Quanto ao & # 8220; Senhor & # 8221; John's comentário, eu acho que ele deve ter nascido ensinado ou algo assim # 8230; 😛
então eu ainda tenho perguntas em relação a isso & # 8230;
91 | 92 = 95 (1011011 | 1011100 = 1011111)
95 & # 038; 91 = 91 CORRECTO.
95 & # 038; 92 = 92 CORRECTO.
Eu reconheço que os poderes de 2 devem ser usados para evitar apenas essa complicação. No entanto, tenho um gerente de desenvolvimento que está convencido de que isso pode ser feito com qualquer conjunto de números. Alguém poderia me esclarecer como eu posso usar poderes não de 2 em uma máscara de bits e ainda ser capaz de evitar falsos positivos?
então eu ainda tenho perguntas em relação a isso & # 8230;
91 | 92 = 95 (1011011 | 1011100 = 1011111)
95 & # 038; 91 = 91 CORRECTO.
95 & # 038; 92 = 92 CORRECTO.
Eu reconheço que os poderes de 2 devem ser usados para evitar apenas essa complicação. No entanto, tenho um gerente de desenvolvimento que está convencido de que isso pode ser feito com qualquer conjunto de números. Alguém poderia me esclarecer como eu posso usar poderes não de 2 em uma máscara de bits e ainda ser capaz de evitar falsos positivos?
Você precisa usar máscaras de bits.
Se você quiser mais opções, use um campo de máscara de bits maior (por exemplo, 0000000 em vez de apenas 0000).
Uma coisa que vou adicionar, o principal problema com estes (e eu não gosto muito) é que você pode ficar sem bits / flags que você pode atribuir rapidamente.
Por exemplo, um número de 32 bits significa que você pode ter até 32 diferentes flags de permissão ou itens em seu carrinho, etc.
Você não usaria um bitmask para manipular os itens que um usuário tem em seu carrinho de compras, pois haveria 1000 itens de itens (e para ter 1000s de itens suportados, você precisaria de uma máscara de bit + 1000bit para lidar com cada item).
Obrigado. Muito bom tutorial e ótimas respostas! Exceto pelo único cara que deveria morrer e limpar o pool genético um pouco.
Esse john deve ser totalmente retardado.
Quão estúpida pode ser uma pessoa?
Obrigado! Fui encarregado de trabalhar com um banco de dados que usa máscaras de bits e quase desenhei um espaço em branco. Eu esqueci completamente como tudo veio junto. Este artigo lembrou totalmente o padrão de pensamento para mim!
Eu acho que John tem razão, embora ele seja um idiota. Um verdadeiro programador entende os conceitos subjacentes, isso deve ser aprendido quando você inicia a programação. Chamar-se (no sentido literal, não o autor) de um profissional quando você não conhece os princípios básicos é como chamar a si mesmo de mecânico e não saber que os carros usam motores de combustão, mas consertam motores porque usam peças. Eu não quero que o mecânico trabalhe no meu carro. Note que na minha analogia inventada o mecânico não precisa conhecer a termodinâmica, simplesmente como funciona em geral, da mesma forma que um programador não precisa usar microcódigo ou montador.
Eu sou um estudante júnior de ficção científica, e eu nunca tinha ouvido falar de bitmask até hoje. Ele surgiu no meu trabalho @ quando perguntei a um dos nossos gênios & # 8221; para um tutorial sobre algo. Assim como foi mencionado em um post anterior, os melhores no campo são os mais úteis e humildes. Eu aprendi que pessoas inseguras andando por aí dizendo a analfabetos que eles são hackers e programadores têm a atitude de John e acabam falhando por causa disso. O trabalho em equipe é o melhor ambiente de aprendizado na minha opinião. É impossível saber tudo.
Olá, eu tropecei nisso à procura de uma reciclagem (eu vi isso uma vez antes em uma classe e esta seria minha primeira vez aplicando-o).
Eu posso estar confuso, mas acho que pode haver um problema com o seu algoritmo de leigos:
Nosso carrinho pode ter os seguintes itens nele (com os valores fornecidos em seu exemplo).
Vamos supor que apenas uma laranja e uma maçã estejam no carrinho.
soma mod 4 0 (uma maçã está no carrinho)
soma mod 2 = 0 (uma laranja não está no carrinho) - & gt; ERRO.
Mas e se tivéssemos uma maçã no carrinho?
Isso não está funcionando porque estamos lidando com números inteiros no exemplo? (Fiquei com a impressão de que o compilador e a velocidade de deslocamento de bits dentro de um processador cuidariam da conversão).
Se uma máscara de bits puder ser aplicada com números inteiros, suspeito que preciso aplicar mais que um mod para obter o resultado. Você pode me dizer o que eu estou perdendo?
PS: Desculpe por escrever isso cerca de 3 anos de atraso; & gt;)
Comerciante anônimo.
Anonymous trader é um novo software livre de negociação de opções binárias. As pessoas que montam este software têm uma maneira muito estranha de marketing e eu acho que é enganoso e não muito profissional.
Hoje, irei fornecer análise e análise do motivo pelo qual a equipe por trás desse produto está comercializando seus produtos de maneira tão estranha e por que tipo de impacto isso terá nos clientes em potencial.
Análise do Negociante Anónimo.
When you first enter the anonymous trader webpage you will find a video on the left-hand side an email subscription form on the right. The video starts itself and tries to make it seem like some of big event is happening and that this screen is being taken over by hackers. After that, there is a guy wearing a mask, a mask that originated from the movie v for vendetta. It’s almost too ridiculous to write about but considering this is the information they are giving me I have no other choice.
As the anonymous trader video wears on the guy in the mask is telling us that we’ve been scammed repeatedly. He claims that the binary options market is rigged so that nobody can win. It seems like they’re trying to create doubt by using hysterical conspiracy theories. I really don’t see how this is the proper way to market a financial investment. As far as I’m concerned this is a total joke. No part of me is gullible enough to believe in these theories. I just can’t see how anyone in the right frame of mind would invest real money in something so far-fetched as this.
This is just so absurd.
Today I will not be recommending the anonymous trader software to any binary today reader or anyone who stumbles upon this website. This is clearly a bad ploy to try and suck in some conspiracy theory lovers into signing up with a binary options broker and using a software that likely doesn’t work. Please let me know what you think about the system because I’m sure if you watched even 2 minutes of this video you have something funny to contribute. Thanks for stopping by and I hope that this review at the very least brought a smile to your face.
How can I do a bit mask?
How can I do a bit mask?
03-11-2010 05:44 PM.
Mark as New Bookmark Subscribe Subscribe to RSS Feed Permalink Print Email to a Friend Report to a Moderator.
Re: How can I do a bit mask?
03-11-2010 06:05 PM - edited 03-11-2010 06:06 PM.
Mark as New Bookmark Subscribe Subscribe to RSS Feed Permalink Print Email to a Friend Report to a Moderator.
AND the U32 with another U32 with the 3rd bit set to 1 (easy to do in binary formatting).
To set a bit, use the OR operator.
Boolean operators work very nice with integer numbers.
Re: How can I do a bit mask?
03-11-2010 06:05 PM.
Mark as New Bookmark Subscribe Subscribe to RSS Feed Permalink Print Email to a Friend Report to a Moderator.
your int AND 4 (or change visual option of the '4' to binary and write '100')
Then either compare to 0, 4 or >0.
"Only dead fish swim downstream" - "My life for Kudos!" - "Dumb people repeat old mistakes - smart ones create new ones."
Re: How can I do a bit mask?
03-11-2010 09:11 PM.
Mark as New Bookmark Subscribe Subscribe to RSS Feed Permalink Print Email to a Friend Report to a Moderator.
Given: X is the input for bit 3 testing.
1. X AND 8 = y (notice that at is 00000000000000000000000000001000 binary in decimal)
2. Convert y to a boolean array = z.
3. Or all element in array(z) = result.
If result is true, bit 3 is set. If not, bit 3 is clear.
Комментариев нет:
Отправить комментарий