怎样计算算法的时间复杂度?

做ACM的时候接触了这一概念,但一直不知道怎么计算
以下代码出现超时问题,请问如何计算其时间复杂度?

#include<stdio.h>
long long a,b,p;
long long ab(long long x){
    if(x<0){
        x=~x+1;
    }
    else{
        x=x;
    }
    return x;
}
main(){
    scanf("%lld",&a);
    scanf("%lld",&b);
    scanf("%lld",&p);
    long long A,B;
    long long sum;
    long long s;
    A=ab(a);
    B=ab(b);
    while(b){
        if(b&1){
            sum=A+B;
        }
        A=A<<1;
        B=B>>1;
    }
    if((a^b)<0){
        s=~sum+1;
    }
    else{
        s=sum;
    }
    printf("%lld",s%p);
}

简单来说就是嵌套循环的次数,递归的麻烦一点,你可以参考一下https://blog.csdn.net/weixin_44417475/article/details/104703670