一段C语言的代码求解释

char * largestOddNumber(char * num){
  char *first = num;
  char *last = num + strlen(num) - 1;
  while (last >= first) {
      if (*last & 0x1) {
          *(last + 1) = '\0';
          return first;
      }
      last--;
  }
  return "";
}

 

/*
函数作用:将一串数字字符串从后往前遍历,找到第一次出现奇数的位置
然后返回修改后的字符串
例:24386
返回:243
输入:213546
输出:2135
*/
char * largestOddNumber(char * num){
  char *first = num;                    
  char *last = num + strlen(num) - 1;       //输出num最后一个字符,num是首地址,加上strlen(num)-1,last指向的就是最后一个字符

  while (last >= first) {           //循环条件是从后向前遍历num字符串
      if (*last & 0x1) {            //C语言中&表示按位与,0x开头的表示的是十六进制数,k&0x1表示k与0x1按位与,其效果为取k的二进制中最右边的数字
                                    //在这里作为判断条件,实际上就是找奇数,奇数的二进制最右边为1
          *(last + 1) = '\0';       //令他后面的字符变为空字符    
          return first;             
      }
      last--;           //指针前移
  }
  return "";
}