Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

121
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!