Como mudar valores binários em C Programming

A linguagem de programação C possui dois operadores binários que realizam a operação equivalente a # 147 Toda a gente dar um passo para a esquerda (ou direita). # 148- A lt; lt; e >> operadores mudar os bits em valor, marchando-los para a esquerda ou direita, respectivamente. Aqui está o formato para o lt; lt; operador:

v = int lt; lt; contagem-

int é um valor inteiro. contador é o número de lugares para deslocar os bits do valor para a esquerda. O resultado desta operação é armazenado na variável v. Quaisquer bits que são deslocadas para a esquerda em relação à largura do int variável x estão perdidos. Novos bits deslocados da direita são sempre 0.

Como com a maioria absurdo binário, que ajuda a visualmente ver o que está acontecendo em um valor quando os seus bits são deslocados.

Todos para fora da piscina!

#include char * binbin (int n) -int main () {int bshift, printf-x ( "Digite um valor de 0 a 255:") -scanf ( "% d", bshift) -para (x = 0- xlt; 8-x ++) {printf ( "% s n", binbin (bshift)) - bshift = bshift lt; lt; 1-} return (0) -} char * binbin (int n) {bin static char [9] -int x-for (x = 0-xlt; 8-x ++) {bin [x] = n 0x80? '1': '0'-n lt; lt; = 1} bin [x] = ' 0'-retorno (bin) -}

A operação de deslocamento ocorre na Linha 15 em Todos para fora da piscina !. O valor na variável bshift é deslocada para a esquerda um pouco.

Exercício 1: Digite o código-fonte de todos fora da piscina! em seu editor e construir um novo projeto.

O efeito líquido de uma mudança pouco à esquerda é dobrar um valor. Isso é verdade até certo ponto: Obviamente, quanto mais à esquerda você mudar, alguns pedaços se perder eo valor deixa de dobrar. Além disso, o truque só funciona para valores não assinados.

exercício 2: Modificar o código fonte de todos fora da piscina! de modo que a função printf () na linha 14 também mostra o valor decimal do bshift variável. Você também deve modificar a função binbin () para que ele exibe 16 dígitos, em vez de 8.

Aqui está a saída quando usando o valor 12:

Digite um valor de 0 a 255: 120000000000001100 120000000000011000 240000000000110000 480000000001100000 960000000011000000 1920000000110000000 3840000001100000000 7680000011000000000 1536

Tente o valor 800.000.000 (não digite as vírgulas) para ver como a regra de duplicação falhar como os valores de manter deslocando para a esquerda. Também ver a barra lateral nas proximidades Número 147-Negativas números binários # 148;.

O >> operador de deslocamento funciona de forma semelhante ao lt; lt; mudar de operador, embora os valores são marcharam para a direita em vez da esquerda. Qualquer que pouco de marcha para fora da extremidade direita é descartado, e são inseridas apenas bits zero no lado esquerdo. Aqui é o formato:

v = int >> count-

int é um valor inteiro, e contagem é o número de locais para mudar os bits para a direita. O resultado é armazenado na variável v.

exercício 3: Modificar o código fonte do Exercício 2, para que o operador de deslocamento à direita é usado em vez do deslocamento para a esquerda na Linha 15. Construir o programa.

Aqui está o resultado quando se utiliza o valor de 128:

Digite um valor de 0 a 255: 1280000000010000000 1280000000001000000 640000000000100000 320000000000010000 160000000000001000 80000000000000100 40000000000000010 20000000000000001 1

ao contrário do lt; lt; operador, o >> é garantido para sempre reduzir o valor pela metade quando se deslocar de um dígito para a direita. De facto, o operador >> é muito mais rápido para utilizar em um valor inteiro do que o operador / (divisão) para dividir um valor de 2.

o lt; lt; e >> operadores estão disponíveis apenas na língua C. Em C ++, os operadores semelhantes são usados ​​para receber entrada padrão e enviar a saída padrão.

Os números binários são sempre positivos, considerando que os valores de um bit pode ser apenas 1 ou 0 e não -1 e 0. Então como é que o computador fazer inteiros assinados? Fácil: Ele engana.

O bit mais à esquerda em um valor binário com sinal é conhecido como o bit de sinal. Quando esse bit é definida (igual a 1), o valor é negativo para um inteiro assinado. Caso contrário, o valor é lido como positivo.

image0.jpg

Neste exemplo, o bit de sinal é ajustada para um caractere assinado. Os valores expressos são negativos, que está na gama de uma variável caractere assinado.

image1.jpg

Neste exemplo, o bit de sinal é ignorada porque o valor é um unsigned char. Os valores só pode ser positivo, razão pela qual o intervalo positivo para uma variável não assinada é maior do que para uma variável assinada.

menu