<h1> C </h1>
Sorry for the bulky code, I am still a noob. The idea is to grab the first piece of bits from n such that k < n, then extract each bit of n from that point on and update remainder and quotient along the way.  

    #include <stdio.h>

    unsigned int rightMostBit(unsigned int n){
       unsigned int bitmask=0x1 << 31;
       int position=31;
       while((bitmask & n)==0 && position>=0){
            position-=1;
            bitmask = bitmask>>1;
       }
       return position;
    }

    unsigned int extractBits(unsigned int n, unsigned int start, unsigned int end){
        unsigned int unitMask=0x1;
        unsigned int mask=unitMask << start;
        for(int i=start;i<end;i++){
            mask= (mask | (mask << 1));
        }
        return  ((mask &  n) >> start);
    }

    void longDivision(unsigned int n, unsigned int k)
    {
          unsigned int q=0;
          unsigned int head=rightMostBit(n);
          int tail=head;
          unsigned int r=extractBits(n,tail,head);
          while(k>r && tail>=0){
                tail-=1;
                r=extractBits(n,tail,head);
          }

          unsigned int pointMask= 0x1 << tail;

          while(pointMask>0) //scan all bits of n
          {
               if(k<= r){ //If k less than r, we can do division
                  r-= k ; //subtraction
                  q=q << 1; //make space 
                  q = q | 0x1;  //add a 1 to quotient
               }else{
                    q=q << 1; //make space
                    q= q | 0x0; //k > r, so add 0 to quotient
               }
               pointMask=pointMask >> 1;
               if(pointMask!=0){
                    if((pointMask & n)){
                         r=((r << 1) | 1);
                    }else{
                         r=((r << 1) | 0);
                    }
               }
          }
  	  printf("quotient: %d, remainder: %d \n",q,r);
    }