Частица не употребляется для выражения отрицания в предложениях:
- не знаю, не умею, не хочу.
Частица ни употребляется для усиления отрицания, имеющегося в предложении. Отрицание может быть выражено словами нет, нельзя, не, а может только подразумеваться:
- На небе нет ни облачка. — На небе ни облачка.
Частица не употребляется для выражения утверждения в составном глагольном сказуемом (двойное отрицание):
- не могу не сказать (т.е. скажу);
- не мог не знать (т.е. знал).
В качестве первой части сказуемого могут выступать также слова нельзя, невозможно:
- нельзя не сказать (т.е. нужно сказать);
- невозможно не знать (т.е. нужно, возможно знать).
Частица ни чаще употребляется с местоимениями в предложениях с отрицательным сказуемым (при сказуемом имеется отрицание не):
- ни к кому не обращался;
- ни с кем не говорил.
В данном случае использовано двойное отрицание, т.к. необходимо передать утвердительный смысл:
Он не мог не улыбнуться (т.е. улыбнулся).