void dec2bin(char operadores[], int numero, int qtdadeBits) {
  for (int i = qtdadeBits - 1; i >= 0; i--) {
    int deslocamento = numero >> i;
    operadores[qtdadeBits - 1 - i] = deslocamento & 1 ? '1' : '0';
  }
}


x86 assembly (clang, -O0):
<dec2bin>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0x10(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     1165 <dec2bin+0x65>
mov    -0xc(%rbp),%eax
mov    -0x14(%rbp),%ecx
sar    %cl,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%edx
and    $0x1,%edx
mov    $0x30,%eax
mov    $0x31,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
sub    -0x14(%rbp),%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1117 <dec2bin+0x17>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dec2bin>:
push   %rbx
test   %edx,%edx
jle    131b <dec2bin+0x21b>
lea    -0x1(%rdx),%r10d
mov    %edx,%r8d
cmp    $0x10,%edx
jae    111d <dec2bin+0x1d>
mov    %r8,%rax
jmp    12f2 <dec2bin+0x1f2>
mov    %r8d,%r9d
and    $0xfffffff0,%r9d
mov    %r8d,%eax
and    $0xf,%eax
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa 0xf04(%rip),%xmm12
movdqa 0xf0b(%rip),%xmm13
movdqa 0xf12(%rip),%xmm14
movdqa 0xf19(%rip),%xmm15
movdqa 0xf20(%rip),%xmm11
movdqa 0xf28(%rip),%xmm3
pxor   %xmm4,%xmm4
movdqa 0xf2b(%rip),%xmm9
mov    %r8,%rdx
mov    %r9,%rcx
nopl   0x0(%rax,%rax,1)
movq   %rdx,%xmm1
pshufd $0x44,%xmm1,%xmm6
movdqa %xmm6,%xmm1
paddq  0xe6a(%rip),%xmm1
movdqa %xmm6,%xmm5
paddq  0xe6e(%rip),%xmm5
shufps $0x88,%xmm1,%xmm5
movdqa %xmm6,%xmm7
paddq  0xe6e(%rip),%xmm7
movdqa %xmm6,%xmm1
paddq  0xe72(%rip),%xmm1
shufps $0x88,%xmm7,%xmm1
movdqa %xmm6,%xmm7
paddq  %xmm12,%xmm7
movdqa %xmm6,%xmm8
paddq  %xmm13,%xmm8
shufps $0x88,%xmm7,%xmm8
movdqa %xmm6,%xmm7
paddq  %xmm14,%xmm7
paddq  %xmm15,%xmm6
movq   %xmm6,%r11
shufps $0x88,%xmm7,%xmm6
movd   %r11d,%xmm7
movss  %xmm7,%xmm6
pslld  $0x17,%xmm5
paddd  %xmm11,%xmm5
cvttps2dq %xmm5,%xmm5
pshufd $0xf5,%xmm5,%xmm10
pmuludq %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm7
pmuludq %xmm3,%xmm10
pshufd $0xe8,%xmm10,%xmm5
punpckldq %xmm5,%xmm7
pslld  $0x17,%xmm1
paddd  %xmm11,%xmm1
cvttps2dq %xmm1,%xmm1
pshufd $0xf5,%xmm1,%xmm5
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pmuludq %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm5
punpckldq %xmm5,%xmm1
pslld  $0x17,%xmm8
paddd  %xmm11,%xmm8
cvttps2dq %xmm8,%xmm5
pshufd $0xf5,%xmm5,%xmm2
pmuludq %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pmuludq %xmm3,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm5
pslld  $0x17,%xmm6
paddd  %xmm11,%xmm6
cvttps2dq %xmm6,%xmm2
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm3,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq %xmm3,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm2
pand   %xmm0,%xmm1
pand   %xmm0,%xmm7
pcmpeqd %xmm4,%xmm7
pcmpeqd %xmm4,%xmm1
packssdw %xmm7,%xmm1
pand   %xmm0,%xmm2
pand   %xmm0,%xmm5
pcmpeqd %xmm4,%xmm5
pcmpeqd %xmm4,%xmm2
packssdw %xmm5,%xmm2
packsswb %xmm1,%xmm2
paddb  %xmm9,%xmm2
mov    %r10,%rbx
sub    %r11,%rbx
movdqu %xmm2,(%rdi,%rbx,1)
add    $0xfffffffffffffff0,%rdx
add    $0xfffffffffffffff0,%rcx
jne    1180 <dec2bin+0x80>
cmp    %r8,%r9
je     131b <dec2bin+0x21b>
sub    %rax,%r10
lea    (%r10,%rdi,1),%rcx
add    $0x1,%rcx
nopl   (%rax)
lea    -0x1(%rax),%rdx
bt     %edx,%esi
mov    $0x31,%bl
adc    $0xff,%bl
mov    %bl,(%rcx)
add    $0x1,%rcx
cmp    $0x1,%rax
mov    %rdx,%rax
ja     1300 <dec2bin+0x200>
pop    %rbx
ret

LLVM IR (-O0):
define void @dec2bin(i8* %0, i32 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i8* %0, i8** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
%9 = load i32, i32* %6
%10 = sub nsw i32 %9, 1
store i32 %10, i32* %7
br label %11
11: ; preds = %31, %3
%12 = load i32, i32* %7
%13 = icmp sge i32 %12, 0
br i1 %13, label %14, label %34
14: ; preds = %11
%15 = load i32, i32* %5
%16 = load i32, i32* %7
%17 = ashr i32 %15, %16
store i32 %17, i32* %8
%18 = load i32, i32* %8
%19 = and i32 %18, 1
%20 = icmp ne i32 %19, 0
%21 = zext i1 %20 to i64
%22 = select i1 %20, i32 49, i32 48
%23 = trunc i32 %22 to i8
%24 = load i8*, i8** %4
%25 = load i32, i32* %6
%26 = sub nsw i32 %25, 1
%27 = load i32, i32* %7
%28 = sub nsw i32 %26, %27
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %24, i64 %29
store i8 %23, i8* %30
br label %31
31: ; preds = %14
%32 = load i32, i32* %7
%33 = add nsw i32 %32, -1
store i32 %33, i32* %7
br label %11
34: ; preds = %11
ret void
}

LLVM IR (-O2):
define void @dec2bin(i8* nocapture writeonly %0, i32 %1, i32 %2) {
%4 = icmp sgt i32 %2, 0
br i1 %4, label %5, label %36
5: ; preds = %3
%6 = add nsw i32 %2, -1
%7 = zext i32 %2 to i64
%8 = zext i32 %6 to i64
%9 = icmp ult i32 %2, 16
br i1 %9, label %34, label %10
10: ; preds = %5
%11 = and i64 %7, 4294967280
%12 = and i64 %7, 15
%13 = insertelement <16 x i32> poison, i32 %1, i64 0
%14 = shufflevector <16 x i32> %13, <16 x i32> poison, <16 x i32> zeroinitializer
br label %15
15: ; preds = %15, %10
%16 = phi i64 [ 0, %10 ], [ %30, %15 ]
%17 = sub i64 %7, %16
%18 = insertelement <16 x i64> poison, i64 %17, i64 0
%19 = shufflevector <16 x i64> %18, <16 x i64> poison, <16 x i32> zeroinitializer
%20 = add <16 x i64> %19, <i64 -1, i64 -2, i64 -3, i64 -4, i64 -5, i64 -6, i64 -7, i64 -8, i64 -9, i64 -10, i64 -11, i64 -12, i64 -13, i64 -14, i64 -15, i64 -16>
%21 = trunc <16 x i64> %20 to <16 x i32>
%22 = shl nuw <16 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>, %21
%23 = and <16 x i32> %22, %14
%24 = icmp eq <16 x i32> %23, zeroinitializer
%25 = select <16 x i1> %24, <16 x i8> <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>, <16 x i8> <i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49, i8 49>
%26 = extractelement <16 x i64> %20, i64 0
%27 = sub nuw nsw i64 %8, %26
%28 = getelementptr inbounds i8, i8* %0, i64 %27
%29 = bitcast i8* %28 to <16 x i8>*
store <16 x i8> %25, <16 x i8>* %29
%30 = add nuw i64 %16, 16
%31 = icmp eq i64 %30, %11
br i1 %31, label %32, label %15
32: ; preds = %15
%33 = icmp eq i64 %11, %7
br i1 %33, label %36, label %34
34: ; preds = %5, %32
%35 = phi i64 [ %7, %5 ], [ %12, %32 ]
br label %37
36: ; preds = %37, %32, %3
ret void
37: ; preds = %34, %37
%38 = phi i64 [ %39, %37 ], [ %35, %34 ]
%39 = add nsw i64 %38, -1
%40 = trunc i64 %39 to i32
%41 = shl nuw i32 1, %40
%42 = and i32 %41, %1
%43 = icmp eq i32 %42, 0
%44 = select i1 %43, i8 48, i8 49
%45 = sub nuw nsw i64 %8, %39
%46 = getelementptr inbounds i8, i8* %0, i64 %45
store i8 %44, i8* %46
%47 = icmp ugt i64 %38, 1
br i1 %47, label %37, label %36
}