/******************************************************************************
Online C Compiler.
Code, Compile, Run and Debug C program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <stdint.h>
#include <stdbool.h>
#include <stdio.h>
int sum(int a , int b);
unsigned short int bitMul(unsigned short int a, char b);
unsigned short int zMax(unsigned short int a, unsigned short int b)
{
int aa,bb;
aa=a;//convert unsigned 16 bit to signed 32 bit
bb=b;//convert unsigned 16 bit to signed 32 bit
aa=sum(aa,sum(~bb,1));// subtract using two's complement --->aa=aa-bb
return sum(bitMul(a,~aa>>16 &1),bitMul(b,aa>>16 &1)); // if a is les than b, so the sixteenth bit is 1, else it is 0
}
int sum(int a , int b)
{
int carry ;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
b=carry << 1;
carry = a & b;
a = a ^ b;
return a;
}
unsigned short int bitMul(unsigned short int a, char b)
{
return (a&b | a&b<<1 | a&b<<2 | a&b<<3 | a&b<<4 | a&b<<5 | a&b<<6 | a&b<<7 | a&b<<8 | a&b<<9 | a&b<<10 | a&b<<11 | a&b<<12 | a&b<<13 | a&b<<14 | a&b<<15);
}
uint16_t Max(uint16_t A,uint16_t B)
{
return (A>B) ? A:B;
}
int main(void)
{
puts("!!!Hello World!!!\r\n"); /* prints !!!Hello World!!! */
uint16_t breakc = 0;
for(int A=0;A<0xFFF;A++)
{
for(int B=0;B<0xFFF;B++)
{
if(zMax(A,B)!=Max(A,B))
{
printf("A=%i,B=%i\tMax=%i\r\n",A,B,zMax(A,B));
if(breakc++>=4)
{
printf("\r\n END.");
return 0;
}
}
}
}
printf("\r\n END.");
return 0;
}