Básicamente, "saturación" significa que los valores más allá de algún valor "máximo" se establecen en "máximo", y los valores por debajo de un valor "mínimo" se establecen en "min". Por lo general, "mínimo" y "máximo" son los valores apropiados para algún tipo de datos.
Así, por ejemplo, si toma aritmética en bytes sin signo, "128 + 128" debería ser "256" (que es hexadecimal 0x100), que no cabe en un byte. La aritmética de enteros normales crearía un desbordamiento y descartaría la parte que no encaja, lo que significa "128 + 128 -> 0". Con aritmética saturada, "256> 255", por lo que el resultado es 255.
Otra opción sería escalar, lo que básicamente "comprime" los valores a un rango menor. La saturación simplemente los corta.
También puede usar esto para poner tipos más grandes en otros más pequeños, como poner valores de 16 bits en valores de 8 bits. Es muy probable que tu ejemplo haga exactamente eso, aunque probablemente sabrás mejor que yo de qué tipo de tipos estás tratando.
"UnsignedSaturation" probablemente tiene un mínimo de "0" y un "máximo" de lo que sea el máximo del tipo de resultado. Por lo tanto, las entradas negativas se convierten en "0".