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

122
Visualizações
¿Puedo hacer un cálculo con un valor fuera del rango de mi variable?

Estoy codificando en C y sé los valores que se pueden almacenar en un rango uint8_t de 0 a 255. Quiero almacenar un valor que sea el porcentaje de MAX_INTENSITY , declarado como: #define MAX_INTENSITY 200

¿Puedo hacer lo siguiente: uint8_t my_intensity = (MAX_INTENSITY * percentage) / 100; ?

El resultado será 200 o menos, pero durante el cálculo, el resultado intermedio puede ser superior a 255, por ejemplo con percentage = 50 , MAX_INTENSITY * percentage = 10'000. ¿Puede esto causar un problema, incluso si el resultado final será 100, o en el rango de uint8_t ?

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

0

En C, las reglas para determinar el tipo utilizado para cada cómputo intermediario son un tanto complicadas, pero para su caso particular bastante fáciles:

La multiplicación MAX_INTENSITY * percentage involucra una constante entera 200 de tipo int y un percentage variable. Si el tipo de percentage es int o un tipo más pequeño como uint8_t , este operando sufrirá una promoción de entero a tipo int y el resultado tendrá tipo int , luego se usará como operando para la división por 100 , otra constante entera con tipo int , por lo tanto, un cálculo con tipo int y un resultado del mismo tipo. El resultado se convertirá al tipo de destino, uint8_t , que se realiza tomando el módulo positivo 256, una operación completamente definida, especialmente si se sabe que el percentage está en el rango de 0 a 200 .

Por lo tanto, su definición es correcta:

 uint8_t my_intensity = (MAX_INTENSITY * percentage) / 100;

Sin embargo, podría considerar usar type int para esta variable local, ya que no hay ningún beneficio en escribirlo con un tipo más pequeño en este contexto.

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