Stai confondendo ciò che viene considerato vero dalle espressioni condizionali con i valori booleani. L'if/il while/... considerano come vero qualunque cosa che sia diversa da zero*. Tuttavia un bool può assumere solo due valori: true o false (§3.9.1:6).
true è (un literal) di tipo bool (§2.13:5), e lì viene implicitamente convertito in un int. Come specificato dallo standard (§4.5:4), quando un bool viene convertito in un int false diventa 0 e true diventa 1.Values of type bool are either true or false.
È per questo dunque che alla tua variabile intera viene assegnato 1.An rvalue of type bool can be converted to an rvalue of type int, with false becoming zero and true becoming one.
Per inciso, non è così che si usa il forum, dato che è una domanda nuova dovresti aprire una discussione nuova.
---
* in effetti ciò che viene messo nelle condizioni degli if/while/for/... viene convertito implicitamente in un bool (§6.4:4), e la condizione viene considerata vera se il risultato della conversione è true; valgono perciò le regole della conversione implicita a bool (§4.12):
An rvalue of arithmetic, enumeration, pointer, or pointer to member type can be converted to an rvalue of type bool. A zero value, null pointer value, or null member pointer value is converted to false any other value is converted to true.