Conversão de binário para decimal

Boa tarde, pessoal. No seguinte exercício é apresentada a resolução disponível em

#include <stdio.h>
#include <stdlib.h>
 
unsigned short int bits(int m[4][4])
{
    unsigned short int valret=0, i, j;
    printf("\n");
    for(i=0 ; i<4 ; i++)
        for(j=0 ; j<4 ; j++)
        {
            valret=(valret << 1 | m[i][j]);
            printf("%d ", valret);
        }
    return valret;
}
 
main()
{
    int i, j, num=0;
    int m[4][4];
    for(i=0 ; i<=3 ; i++)
        for(j=0 ; j<=3 ; j++)
            scanf("%d", &m[i][j]);
    printf("\n\nnumero convertido para inteiro: %d", bits(m));
    printf("\n\n");
}

CÓDIGO

Faça uma função que receba uma matriz M[4][4] de inteiros iguais a 0 ou 1, e retorne um inteiro de 16 bits sem sinal em que cada bit contem o valor correspondente a uma posição da matriz. O bit 15 deve conter o valor da posição m[0][0] e o bit 0 deve conter o valor da posição [3][3].

Alguém poderia me explicar qual o propósito da linha 11: valret=(valret << 1 | m[i][j]) ?

1 curtida

Definição: Deslocamento de bits à esquerda


Exemplo de funcionamento:

int x = 1; // 0000 0001

int x0 = (x << 0); // 0000 0001 Não deslocado
int x1 = (x << 1); // 0000 0010
int x2 = (x << 2); // 0000 0100
int x3 = (x << 3); // 0000 1000
int x4 = (x << 4); // 0001 0000
int x5 = (x << 5); // 0010 0000
int x6 = (x << 6); // 0100 0000
int x7 = (x << 7); // 1000 0000


Exemplo do código acima e referencia desse link.


Boa Leitura: