Hay dos entradas sin firmar (x e y) que deben restarse. x siempre es mayor que y. Sin embargo, tanto x como y pueden envolverse; por ejemplo, si ambos fueron bytes, después de 0xff viene 0x00. El caso del problema es si x se ajusta, mientras que y no. Ahora x parece ser más pequeño que y. Afortunadamente, x no se ajustará dos veces (solo una vez está garantizado). Suponiendo bytes, x se ha envuelto y ahora es 0x2, mientras que y no tiene y es 0xFE. La respuesta correcta de x - y se supone que es 0x4.Cómo restar dos entradas sin firmar con envolvente o desbordamiento
Tal vez,
(x > y) ? (x-y) : (x+0xff-y);
Pero creo que hay otra manera, algo que implica complemento 2s ?, y en este sistema embebido, X e Y son los mayores tipos unsigned int, por lo que añadir 0xff ... es no es posible
¿Cuál es la mejor manera de escribir el enunciado (el idioma de destino es C)?
¿Qué excepto de esta "mejor manera"? Por favor, aclare sus requisitos ... – ThinkJet
¿Qué quiere decir "tanto x como y pueden envolverse"? ¿Quiere decir que podrían envolver si se emiten desde tipos sin firmar a firmados? – jamesdlin
Los dos puntos no tienen firma. El caso del problema es si x se ajusta, mientras que y no. Ahora x parece ser más pequeño que y. Afortunadamente, x no se ajustará dos veces (solo una vez está garantizado). Suponiendo bytes, x se ha envuelto y ahora es 0x2, mientras que y no tiene y es 0x14. La respuesta correcta de x - y se supone que es 0x4. (x> y)? (x-y): (x + 0xff-y); pero creo que hay otra manera, y en este sistema integrado, xey son los tipos int sin firmar más grandes, por lo que no es posible agregar 0xff ... – mgag