为何执行这个程序的时候会出错

为什么执行这个程序的时候会出错
#include <stdio.h>
void main ()
{  
  int a=0,flag;
  flag=((a!=0)&(5/a==1));
  printf("%d\n",flag);
}
但如果是换成这样子了就不会出错了:
#include <stdio.h>
void main ()
{  
  int a=0,flag;
  flag=((a!=0)&&(5/a==1));
  printf("%d\n",flag);
}
    
------解决思路----------------------
引用:
我只是想问为什么换了逻辑与程序就不出错了

if(a && b){}
a如果是false,直接跳过if语句,不会执行b。
 flag=((a!=0)&&(5/a==1));
a!=0 这句返回false,&&之后的(5/a==1)就不会执行了,所以程序没问题。

((a!=0)&(5/a==1))
按位与运算,执行完a!=0后再执行5/a==1,执行5/a 时CPU就引发除0硬件异常。