please explain this program

#include
#include

int main(int argc, char *argv[])

{

FILE *file_a;
int char_a, char_b = strtol(argv[2], NULL, 10), i = 0;

file_a = fopen(argv[1], "r");

while((char_a = getc(file_a)) != EOF)
{
    if(i < 128) putchar(char_a ^ char_b) && i++;
    else putchar(char_a);
}

fclose(file_a);

return EXIT_SUCCESS;

}