2012-05-30 14 views

Respuesta

5

Si el valor es lo suficientemente pequeño, simplemente se asigna. De lo contrario, se asigna de una manera definida por la implementación. Por lo general, esto significa que se "ajustará".

6.3.1.3-1

Cuando un valor con el tipo de número entero se convierte a otro número entero tipo distinto _Bool, si el valor puede ser representado por el nuevo tipo, que es sin cambios.

De lo contrario, si el nuevo tipo es sin signo, el valor se convierte por adición o sustracción de uno más que el valor máximo que se puede representar en el nuevo tipo hasta que el valor está en el rango de el nuevo tipo repetidamente .

De lo contrario, el nuevo tipo está firmado y el valor no se puede representar en él; o el resultado está definido por la implementación o se genera una señal definida como implementación .

2

Creo que la conversión es transparente para ese tipo de datos, pero debe tenerse precaución. Si el valor de uint32_t es más grande que int32_t puede contener, entonces int32_t pasará a un valor indeseable.

3

a se convierte al tipo de b como por asignación.

(C99, 6.5.2.2p7) "Si la expresión que denota la función llamada tiene un tipo que hace incluir un prototipo, los argumentos se convierten implícitamente, como si por asignación, a los tipos de los parámetros correspondientes , tomando el tipo de cada parámetro como la versión no calificada de su tipo declarado ".

En su caso, si el valor que se va a convertir se puede representar en el nuevo tipo, no se modifica.

(C99, 6.3.1.3p1) "Cuando un valor con el tipo de número entero se convierte en otro tipo entero distinto de _Bool, si el valor puede ser representado por el nuevo tipo, es sin cambios."

de lo contrario, se convierte en una implementación de manera definida:

(C99, 6.3.1.3p3) "De lo contrario, el nuevo tipo se firma y el valor no puede ser representado en ella, ya sea el resultado está definido por implementación o se genera una señal definida por la implementación."

Cuestiones relacionadas