Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

125
Visualizações
El desplazamiento a la derecha de las variables sin firmar da un resultado extraño - C / GBDK

Estoy desarrollando un juego de Gameboy en GBDK, pero tengo un problema con las variables sin signo de desplazamiento a la derecha (8 bits). El código se ve así.

 #include <gb/gb.h> #include <stdio.h> #define GAME_OBJ_MAX_WIDTH 10 #define GAME_OBJ_MAX_HEIGHT 8 struct game_obj { UBYTE matrix[GAME_OBJ_MAX_WIDTH]; UBYTE width, height; }; void draw_game_obj(struct game_obj *object) { for (unsigned char i = 0; i < object->width && i < GAME_OBJ_MAX_WIDTH; i++) { printf("BASE->%d\n", object->matrix[i]); for (unsigned char j = 0; j < object->height && j < GAME_OBJ_MAX_HEIGHT; j++) printf("Shift by %d->%u\n", j, object->matrix[i] >> j); } } void main() { struct game_obj racer; racer.height = 4; racer.width = 3; racer.matrix[0] = 10; racer.matrix[1] = 7; racer.matrix[2] = 10; draw_game_obj(&racer); }

La salida es:

 BASE->10 Shift by 0->235 Shift by 1->117 Shift by 2->58 Shift by 3->29 BASE->7 Shift by 0->235 Shift by 1->117 Shift by 2->58 Shift by 3->29 BASE->10 Shift by 0->235 Shift by 1->117 Shift by 2->58 Shift by 3->29

Básicamente, cualquier valor sin signo desplazado a la derecha (incluso por 0) cambia a 235 , 117 , 58 y así sucesivamente... Estoy tratando de entender por qué.

Solución

Problema solucionado al asignar object->matrix[i] a una variable separada.

 void draw_game_obj(struct game_obj *object) { for (unsigned char i = 0; i < object->width && i < GAME_OBJ_MAX_WIDTH; i++) { printf("BASE->%d\n", object->matrix[i]); UBYTE u = object->matrix[i]; for (unsigned char j = 0; j < object->height && j < GAME_OBJ_MAX_HEIGHT; j++) printf("Shift by %d->%u\n", j, u >> j); } }
over 4 years ago · Santiago Trujillo
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda