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

223
Visualizações
tipo de operando derecho de desplazamiento de bits

Me pregunto cuál es el operando correcto de la mano derecha para los operadores de cambio de bits de C/C++.

Al momento de escribir, los tipos aritméticos integrados tienen menos de 256 bits, por lo que un solo byte sería suficiente. Además, las instrucciones de cambio x86 usan imm8 . Juntos, esto sugiere que el operando de la derecha debería ser un unsigned char y el uso de un tipo diferente aquí requerirá una conversión de tipo.

¿Hay un tipo "más correcto" para usar aquí? Sé que el estándar es extrañamente indulgente con otros aspectos del cambio de bits, así que tal vez este sea otro caso similar.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Se puede utilizar cualquier tipo de entero como el operando derecho de un desplazamiento bit a bit, siempre que el valor sea al menos 0 y menor que la longitud en bits del operando izquierdo.

Esto se detalla en la sección 6.5.7 p2 y p3 del estándar C con respecto a los operadores de desplazamiento bit a bit:

2 Cada uno de los operandos será de tipo entero

3 Las promociones de enteros se realizan en cada uno de los operandos. El tipo del resultado es el del operando izquierdo promocionado. Si el valor del operando derecho es negativo o es mayor o igual que el ancho del operando izquierdo promocionado, el comportamiento es indefinido.

Entonces, si bien el rango de un unsigned char debería ser suficiente para contener cualquier valor válido, el operando correcto se promoverá a int de todos modos.

over 4 years ago · Santiago Trujillo Relatório

0

C tiende a querer hacer todo como al menos int , por lo que sería muy sorprendente si el RHS de << y >> se especificara como unsigned short o unsigned char .

Es difícil imaginar por qué un programador alguna vez usaría long (o, Dios nos ayude, long long ) allí, pero acabo de probar este código:

 int main() { int x = 16; long int y = 2; int z1 = x << y; int z2 = x >> y; printf("%d %d\n", z1, z2); long long int y2 = 2; z1 = x << y2; z2 = x >> y2; printf("%d %d\n", z1, z2); }

Lo compilé bajo dos compiladores, y ninguno dio ninguna advertencia, y ambos programas imprimieron 64 4 . (No es una prueba concluyente, pero sugerente.)

over 4 years ago · Santiago Trujillo Relatório
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