#include <stdafx.h>
#include <stdio.h>
int print_binary_using_shift(unsigned __int64 num)
{
unsigned __int64 mask = 1; //000000001 000000010 00000011 00000100 00000101 00000110 000000111 00001000
bool flag = false;
for (int i = 64; i>=0; i--) {
if ( ( ((num&(mask<<i)) >> i) == 1)&&(flag == false) )
flag = true;
if (flag == true)
printf("%d",((num&(mask<<i))>>i));
else
printf(" ");
}
printf("\n");
return 0;
}
int main(int argc, char* argv[])
{
unsigned __int64 N=0;
unsigned __int64 N_modified;
while (!(N<0)) {
printf("Input any number (less than 2 raised to power 64):\n");
scanf("%I64u", &N);
printf("Your number %I64u in binary is :\n", N);
print_binary_using_shift(N);
N_modified = ((N+1)^N)|N; //main formula;
printf("Modified number %I64u in binary is :\n", N_modified);
print_binary_using_shift(N_modified);
printf("\n");
}
return 0;
}