Почему "==0" так влияет на код?

Скорее всего здесь нужно включить логику, но поверьте, сколько бы я не пытался так и не смог понять почему код под номером "1" выводит только результат деления на число без остатка, а код под номером "2" выводит только числа которые делятся на число без остатка? можно посмотреть и понять что это из-за функции "if", в котором условия(или параметры) отличаются. Но неужели это из-за этого отличия " == 0 "? Если это так, то почему это так работает? Я не могу понять, заранее спасибо за ответ.

КОД ПОД НОМЕРОМ "1":

#include <iostream>
using namespase std;

int main(){
   int num = 1;
   while(num <= 50){
   if (num % 3){
     cout << num << endl;
   }
     num += 1;
 }
return 0;
}  

КОД ПОД НОМЕРОМ "2":

#include <iostream>
using namespase std;

int main(){
   int num = 1;
   while(num <= 50){
   if (num % 3 == 0){
     cout << num << endl;
   }
     num += 1;
 }
return 0;
}      

Ответы (1 шт):

Автор решения: MBo

Условие if (num % 3) означает if ((num % 3) != 0)
Если остаток от деления не равен нулю, то выполняется первая ветвь if-a, а если равен, то вторая.

Условие if (num % 3 ==0) означает:
Если остаток от деления равен нулю, то выполняется первая ветвь if-a, а если не равен, то вторая.

Так что же удивительного в том, что противоположные условия дают противоположные результаты?

По вопросу из комментария - оператор if работает согласно народному творчеству

"Деньги есть - Уфа гуляем, денег нет - Чишма сидим."

Если условие выполняется, т.е. выражение в скобках после if равно True то работает первая ветвь после if, если нет (выражение в скобках после if равно False или нулю (во многих языках)), то работает ветвь else (если она присутствует)

→ Ссылка