مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه شک کردم!! یکی دو روز وقت گذاشتم و به بهینهترین شکل ممکن برنامه را به زبان اسمبلی باز نویسی کردم و در کمال تعجب نه تنها نتیجه تغییر نکرد بلکه اختلاف حتی بیشتر هم شد اگر شما عملی تست کردید و نتیجه غیر از چیزی بود که ما اعلام کردیم خوشحال میشویم که نتیجه را با هم بررسی کنیم!!
بگذریم این بار قرار چالش سادهتر از قبل داشته باشم و فعلاً کاری به سخت افزار نداشته باشم و یکم مسابقه را نرم افزاری کنیم و باید زبان مورد استفاده زبان C است.
صورت مساله:
تابعی بنویسید که دو عدد (از نوع بدون علامت ۱۶ بیتی) را دریافت کند و بزرگترین عدد را برگرداند!
احتمالاً تا اینجا مقداری خنده دار به نظر میرسد چرا که به سادگی یک خط زیر میشود تابع را نوشت:
1 2 3 4 | uint16_t Max(uint16_t A,uint16_t B) { return (A>B) ? A:B; } |
البته قرار نیست مسابقه این چنین ساده باشد و لازم است که شرطهای دیگری هم به آن اضافه کنیم
- نباید از هیچ گونه ساختار شرطی استفاده شود (حتی شرطهای درون بدنه حلقه)
- از هیچ تابعی نباید استفاده شود مگر آن که بدنه آن با توجه شرط اول باز نویسی شود.
احتمالاً مقداری کار سختتر شد! ولی همچنان راه حلهای فراوانی میتوانید در اینترنت برای این مسئله پیدا کنید که چند نمونه از آنها را در ادامه قرار میدهیم.
1 2 3 4 5 | int max(int x, int y) { return x - ((x - y) & ((x - y) >> (sizeof(int) * 8 - 1))); } |
یا
1 2 3 4 5 | // Function to find the largest number int largestNum(int a, int b) { return a * (bool)(a / b) + b * (bool)(b / a); } |
و نمونههای زیاد دیگر! پس لازمه پیش شرطها را سختگیرانهتر کنیم.
پیش شرط ها
- نباید از هیچ گونه ساختار شرطی استفاده شود ( <,>,==,<=,>=,&&,||,!,!= ) {حتی شرطهای درون بدنه حلقه}
- نباید از عملیات جمع و منهی استفاده شود (-,+,-=,+=)
- نباید از عملیات ضرب و تقسیم استفاده شود (*,/,/=,*=)
- از هیچ تابعی نباید استفاده شود مگر آن که بدنه آن با توجه شرط اول، دوم و سوم بازنویسی شود.
- استفاده مستقیم و غیر مستقیم از دستورات اسمبلی مجاز نمیباشد.
اما جایزه
کسانی که بتوانند تابع را با توجه به پیش شرطها پیاده سازی کنند به قید قرعه آموزش برنامه نویسی c برای میکروکنترلر مطابق سبک ناسا را به عنوان هدیه دریافت خواهد کرد.
که البته بعد از انجام مسابقه و با توجه به استقبال شرکت کنندگان, تهیه کننده آموزش نیز یک نسخه به عنوان جایزه در نظر گرفتند.
ارسال جواب
پاسخهای خود را در زیر همین پست کامنت کنید.
دقت کنید شرط اول برنده بودن کار کردن تابع به شکل کامل است و شرط دوم ارائه توضیحات کافی در خصوص کارکرد تابع است.
مهلت پاسخ هم تا اخر روز 29 اسفند ماه 98 هست.
شروع سال جدید و پایان چالش دوم سیسوگ
قبل از هر سخنی لازمه که پابان سال ۱۹۳۸ و شروع سال ۱۳۹۹ به تمام دوستان و همراهان سیسوگ تبریک عرض کنم. امیدوارم که در این سال تمام برنامه هاتون با کمترین خطای ممکن کامپایل بشه (بدون خطا که زندگی معنی نداره) و خواسته هاتون محقق بشه. بگذارید بریم سر مسابقه! بگذارید بگم که واقعا انتظار چنین استقبالی رو نداشتم، مخصوصا حجم پاسخ های صحیح واقعا از چیزی که فکر میکردم بیشتر بود که واقعا برام جای خوشحالی داشت و داره.
همونطور که بیشتر دوستان حدس زدند برای حل این مساله باید دست به دامن گیت های دیجیتال شد و دقیقا مشابه کاری که توی ALU برای مقایسه بین اعداد انجام میشه رو اینجا پیاده سازی کنیم. که در واقع این میشه راه مستقیم و یه راه غیر مستفیم هم وجود داره که میشه پیاده سازی توابع جمع و تفریق با کمک گیت های منطقی و استفاده از آنها مطابق معادلات ریاضی مربوطه.
همونطور که پیداست روش اول روش کوتاه تری است٬ و البته پیاده سازی آن هم ساده تر است پس ما هم به سراغ همین راه حل خواهیم رفت. مقایسه دو عدد با کمک گیت های منطقی واقعا ساده است٬ به جدول زیر دقت کنید
1 2 3 4 5 | A B A=B A<B A>B 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1 0 0 |
جدول بالا مقایسه بین دو بیت است که اگر بخواهیم با گیت آن را پیاده سازی کنیم مداری معادل مدار زیر خواهد داشت
با توجه به نیاز مساله ما تنها نیاز به مثلا عبارت A>B است داریم و برای پیاده سازی آن تنها به یک گیت not و یک گیت and نیاز است. اما متغییر های ما یک بیتی نیستند بلکه ۱۶ بیتی هستند در ضمن مساله که باید به آن توجه داشت ارزش بیت ها است که اگر هر کدام از آنها بیت با ارزش بیشتر داشت قطعا آن عدد بزرگ تر است. پس لازم است که ورودی از مقایسه در مرحله قبل را نیز داشته باشیم. که به سادگی با عبارت زیر قابل تشخصی خواهد بود
1 | ( A & ~(B) ) ^ ( C & ~(A ^ B) ) |
بر اساس همین عبارت و گسترش آن برای ۱۶ بیت به سادگی میتوان این مساله را حل کرد. تنها نکته ای که میماند انتخاب عدد بزرگتر است٬ عبارت فوق خروجی صفر یا یک خواهد داشت چطور می توانیم صفر یا یک را عدد بزرگتر تبدیل کنیم ؟؟؟؟
جواب ساده است با استفاده از آرایه. ایندکس صفر آرایه را عدد b قرار میدهیم و ایندکس یک آن را عدد a. وقتی خروجی عبارت یک باشد یعنی a بزرگتر است و ماا لازم است ایندکس یک آرایه را برگردانیم و وقتی صفر باشد که یعنی b بزرگتر است ایندکس صفر آرایه برمیگردانیم. به همین سادگی کار تمام است. به کد زیر دقت کنید :
1 2 3 4 5 6 7 8 9 10 | #define zCMP(A,B,C) ((((A)&~(B))^((C)&~((A)^(B))))&1) #define yCMP(A,B,C) zCMP((A>>3)&1,(B>>3)&1,zCMP((A>>2)&1,(B>>2)&1,zCMP((A>>1)&1,(B>>1)&1,zCMP(A&1,B&1,C)))) #define xCMP(A,B,C) yCMP(((A>>4)&0xF),((B>>4)&0xF),yCMP((A&0xF),(B&0xF),(C))) #define jCMP(A,B) xCMP(((A>>8)&0xFF),((B>>8)&0xFF),xCMP((A&0xFF),(B&0xFF),0)) uint16_t zMax(uint16_t A,uint16_t B) { uint16_t Tmp[]={B,A}; return Tmp[jCMP(A,B)]; } |
خب دوازده نفر تا الان پاسخ درست را ارائه کردند که روش و راه حل اونها را میتونید در زیر ببنید
نفر اول آقای محمود نقدی :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <stdint.h> uint16_t zMax(uint16_t a, uint16_t b) { uint16_t xn = ~(a ^ b); uint16_t nb = ~b; uint16_t a0 = a & 1; uint16_t nb0 = nb & 1; uint16_t xn0 = xn & 1; uint16_t a1 = a & 2; uint16_t nb1 = nb & 2; uint16_t xn1 = xn & 2; a1>>=1; nb1>>=1; xn1>>=1; uint16_t a2 = a & 4; uint16_t nb2 = nb & 4; uint16_t xn2 = xn & 4; a2>>=2; nb2>>=2; xn2>>=2; uint16_t a3 = a & 8; uint16_t nb3 = nb & 8; uint16_t xn3 = xn & 8; a3>>=3; nb3>>=3; xn3>>=3; uint16_t a4 = a & 16; uint16_t nb4 = nb & 16; uint16_t xn4 = xn & 16; a4>>=4; nb4>>=4; xn4>>=4; uint16_t a5 = a & 32; uint16_t nb5 = nb & 32; uint16_t xn5 = xn & 32; a5>>=5; nb5>>=5; xn5>>=5; uint16_t a6 = a & 64; uint16_t nb6 = nb & 64; uint16_t xn6 = xn & 64; a6>>=6; nb6>>=6; xn6>>=6; uint16_t a7 = a & 128; uint16_t nb7 = nb & 128; uint16_t xn7 = xn & 128; a7>>=7; nb7>>=7; xn7>>=7; uint16_t a8 = a & 256; uint16_t nb8 = nb & 256; uint16_t xn8 = xn & 256; a8>>=8; nb8>>=8; xn8>>=8; uint16_t a9 = a & 512; uint16_t nb9 = nb & 512; uint16_t xn9 = xn & 512; a9>>=9; nb9>>=9; xn9>>=9; uint16_t a10 = a & 1024; uint16_t nb10 = nb & 1024; uint16_t xn10 = xn & 1024; a10>>=10; nb10>>=10; xn10>>=10; uint16_t a11 = a & 2048; uint16_t nb11 = nb & 2048; uint16_t xn11 = xn & 2048; a11>>=11; nb11>>=11; xn11>>=11; uint16_t a12 = a & 4096; uint16_t nb12 = nb & 4096; uint16_t xn12 = xn & 4096; a12>>=12; nb12>>=12; xn12>>=12; uint16_t a13 = a & 8192; uint16_t nb13 = nb & 8192; uint16_t xn13 = xn & 8192; a13>>=13; nb13>>=13; xn13>>=13; uint16_t a14 = a & 16384; uint16_t nb14 = nb & 16384; uint16_t xn14 = xn & 16384; a14>>=14; nb14>>=14; xn14>>=14; uint16_t a15 = a & 32768; uint16_t nb15 = nb & 32768; uint16_t xn15 = xn & 32768; a15>>=15; nb15>>=15; xn15>>=15; uint16_t and0 = a0 & nb0 & xn1 & xn2 & xn3 & xn4 & xn5 & xn6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and1 = a1 & nb1 & xn2 & xn3 & xn4 & xn5 & xn6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and2 = a2 & nb2 & xn3 & xn4 & xn5 & xn6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and3 = a3 & nb3 & xn4 & xn5 & xn6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and4 = a4 & nb4 & xn5 & xn6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and5 = a5 & nb5 & xn6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and6 = a6 & nb6 & xn7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and7 = a7 & nb7 & xn8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and8 = a8 & nb8 & xn9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and9 = a9 & nb9 & xn10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and10 = a10 & nb10 & xn11 & xn12 & xn13 & xn14 &xn15; uint16_t and11 = a11 & nb11 & xn12 & xn13 & xn14 &xn15; uint16_t and12 = a12 & nb12 & xn13 & xn14 &xn15; uint16_t and13 = a13 & nb13 & xn14 &xn15; uint16_t and14 = a14 & nb14 & xn15; uint16_t and15 = a15 & nb15; uint16_t a_is_largest = and0 | and1 | and2 | and3 | and4 | and5 | and6 | and7 | and8 | and9 | and10 | and11 | and12 | and13 | and14 | and15; uint16_t base = 0; base |= a_is_largest; base |= a_is_largest<<1; base |= a_is_largest<<2; base |= a_is_largest<<3; base |= a_is_largest<<4; base |= a_is_largest<<5; base |= a_is_largest<<6; base |= a_is_largest<<7; base |= a_is_largest<<8; base |= a_is_largest<<9; base |= a_is_largest<<10; base |= a_is_largest<<11; base |= a_is_largest<<12; base |= a_is_largest<<13; base |= a_is_largest<<14; base |= a_is_largest<<15; return (a & base) | (b & ~base); } |
نفر دوم آقای محمدجواد واعظ :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <stdint.h> bool g(bool a, bool b) //g(a,b)= 1 if a is greater than b (a and b are two bits) {return a&(~b);} bool e(bool a, bool b) //e(a,b)= 1 if a equals b (a and b are two bits) {return(~(a^b) & 0x0001);} uint16_t zMax(int x, int y) { //seperating the bits of x and y bool x0 = x & 1, y0 = y & 1; bool x1 = x & 2, y1 = y & 2; bool x2 = x & 4, y2 = y & 4; bool x3 = x & 8, y3 = y & 8; bool x4 = x & 16, y4 = y & 16; bool x5 = x & 32, y5 = y & 32; bool x6 = x & 64, y6 = y & 64; bool x7 = x & 128, y7 = y & 128; bool x8 = x & 256, y8 = y & 256; bool x9 = x & 512, y9 = y & 512; bool x10 = x & 1024, y10 = y & 1024; bool x11 = x & 2048, y11 = y & 2048; bool x12 = x & 4096, y12 = y & 4096; bool x13 = x & 8192, y13 = y & 8192; bool x14 = x & 16384, y14 = y & 16384; bool x15 = x & 32768, y15 = y & 32768; //If x>y, either x0>y0, or they’re equal but x1>y1 and so on bool b1 = g(x15,y15); bool b2 = e(x15,y15)&g(x14,y14); bool b3 = e(x15,y15)&e(x14,y14)&g(x13,y13); bool b4 = e(x15,y15)&e(x14,y14)&e(x13,y13)&g(x12,y12); bool b5 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&g(x11,y11); bool b6 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&g(x10,y10); bool b7 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&g(x9,y9); bool b8 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&g(x8,y8); bool b9 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&g(x7,y7); bool b10 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&g(x6,y6); bool b11 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&e(x6,y6)&g(x5,y5); bool b12 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&e(x6,y6)&e(x5,y5)&g(x4,y4); bool b13 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&e(x6,y6)&e(x5,y5)&e(x4,y4)&g(x3,y3); bool b14 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&e(x6,y6)&e(x5,y5)&e(x4,y4)&e(x3,y3)&g(x2,y2); bool b15 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&e(x6,y6)&e(x5,y5)&e(x4,y4)&e(x3,y3)&e(x2,y2)&g(x1,y1); bool b16 = e(x15,y15)&e(x14,y14)&e(x13,y13)&e(x12,y12)&e(x11,y11)&e(x10,y10)&e(x9,y9)&e(x8,y8)&e(x7,y7)&e(x6,y6)&e(x5,y5)&e(x4,y4)&e(x3,y3)&e(x2,y2)&e(x1,y1)&g(x0,y0); bool x_is_g = b1 | b2 | b3 | b4 | b5 | b6 | b7 | b8 | b9 | b10 | b11 | b12 | b13 | b14 | b15 | b16; int x_is_greater = x_is_g | (x_is_g<<1) | (x_is_g<<2) | (x_is_g<<3) | (x_is_g<<4) | (x_is_g<<5) | (x_is_g<<6) | (x_is_g<<7) | (x_is_g<<8) | (x_is_g<<9) | (x_is_g<<10) | (x_is_g<<11) | (x_is_g<<12)| (x_is_g<<13) | (x_is_g<<14) | (x_is_g<<15); //this variable will be either 0 or 0xFFFF return ((x_is_greater & x) | ((~x_is_greater)&y)); //if x_is_greater is 0, then y will be returned, otherwise it's 0xFFFF and x will be returned } uint16_t Max(uint16_t A,uint16_t B) { return (A>B) ? A:B; } |
نفر سوم آقای مهدی خلیلی فر :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <stdint.h> void fun(uint16_t *a,uint16_t *b,uint16_t *aFlag,uint16_t *bFlag,uint16_t *temp) { uint16_t c = *temp & (*a ^ *b) & *a; uint16_t d = *temp & (*a ^ *b) & *b; *aFlag |= (*aFlag>>1) | ( c & (~(*bFlag >> 1))); *bFlag |= (*bFlag>>1) | ( d & (~(*aFlag >> 1))); *temp = *temp >> 1; } uint16_t zMax(uint16_t a, uint16_t b) { uint16_t aFlag = 0, bFlag = 0, temp = 0x8000; fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); fun(&a,&b,&aFlag,&bFlag,&temp); return (a & aFlag) | (b & ~aFlag); } |
نفر چهارم آقای شهرام نوربخش راد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <stdint.h> //—————- WORD_BYTES 16-bit typedef union _WORD_BYTES { uint16_t word; uint8_t bytes[2]; struct { uint8_t LB; uint8_t HB; } byte; struct { unsigned char bit0:1; unsigned char bit1:1; unsigned char bit2:1; unsigned char bit3:1; unsigned char bit4:1; unsigned char bit5:1; unsigned char bit6:1; unsigned char bit7:1; unsigned char bit8:1; unsigned char bit9:1; unsigned char bit10:1; unsigned char bit11:1; unsigned char bit12:1; unsigned char bit13:1; unsigned char bit14:1; unsigned char bit15:1; } bits; } WORD_BYTES; unsigned int zMax(unsigned int inA, unsigned int inB) { unsigned char AcaB, AcoB; unsigned int Bnt; WORD_BYTES ABnt, AxnB; unsigned int AgB, Rslt; //——————– Bnt = ~inB; ABnt.word = inA &Bnt; AxnB.word = ~(inA ^inB); //——————– AcoB = ABnt.bits.bit15; AcaB = AxnB.bits.bit15; AcoB |= (ABnt.bits.bit14 &AcaB); AcaB &= AxnB.bits.bit14; AcoB |= (ABnt.bits.bit13 &AcaB); AcaB &= AxnB.bits.bit13; AcoB |= (ABnt.bits.bit12 &AcaB); AcaB &= AxnB.bits.bit12; AcoB |= (ABnt.bits.bit11 &AcaB); AcaB &= AxnB.bits.bit11; AcoB |= (ABnt.bits.bit10 &AcaB); AcaB &= AxnB.bits.bit10; AcoB |= (ABnt.bits.bit9 &AcaB); AcaB &= AxnB.bits.bit9; AcoB |= (ABnt.bits.bit8 &AcaB); AcaB &= AxnB.bits.bit8; AcoB |= (ABnt.bits.bit7 &AcaB); AcaB &= AxnB.bits.bit7; AcoB |= (ABnt.bits.bit6 &AcaB); AcaB &= AxnB.bits.bit6; AcoB |= (ABnt.bits.bit5 &AcaB); AcaB &= AxnB.bits.bit5; AcoB |= (ABnt.bits.bit4 &AcaB); AcaB &= AxnB.bits.bit4; AcoB |= (ABnt.bits.bit3 &AcaB); AcaB &= AxnB.bits.bit3; AcoB |= (ABnt.bits.bit2 &AcaB); AcaB &= AxnB.bits.bit2; AcoB |= (ABnt.bits.bit1 &AcaB); AcaB &= AxnB.bits.bit1; AcoB |= (ABnt.bits.bit0 &AcaB); //——————– AgB = 0x0000; for(int i=0; i<16; i++) AgB |= (AcoB <<i); Rslt = inA &AgB; AgB = ~AgB; Rslt |= (inB &AgB); //——————– return Rslt; } //Compar |
نفر پنجم آقای کامین جلیلی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | #include <stdio.h> #include <stdlib.h> #include <stdint.h> uint16_t A, B; union { uint16_t A_Data; struct { uint16_t A0 : 1; uint16_t A1 : 1; uint16_t A2 : 1; uint16_t A3 : 1; uint16_t A4 : 1; uint16_t A5 : 1; uint16_t A6 : 1; uint16_t A7 : 1; uint16_t A8 : 1; uint16_t A9 : 1; uint16_t A10 : 1; uint16_t A11 : 1; uint16_t A12 : 1; uint16_t A13 : 1; uint16_t A14 : 1; uint16_t A15 : 1; }bits; }A_Read_bit; union { uint16_t B_Data; struct { uint16_t B0 : 1; uint16_t B1 : 1; uint16_t B2 : 1; uint16_t B3 : 1; uint16_t B4 : 1; uint16_t B5 : 1; uint16_t B6 : 1; uint16_t B7 : 1; uint16_t B8 : 1; uint16_t B9 : 1; uint16_t B10 : 1; uint16_t B11 : 1; uint16_t B12 : 1; uint16_t B13 : 1; uint16_t B14 : 1; uint16_t B15 : 1; }bits; }B_Read_bit; struct { uint16_t X0 : 1; uint16_t X1 : 1; uint16_t X2 : 1; uint16_t X3 : 1; uint16_t X4 : 1; uint16_t X5 : 1; uint16_t X6 : 1; uint16_t X7 : 1; uint16_t X8 : 1; uint16_t X9 : 1; uint16_t X10 : 1; uint16_t X11 : 1; uint16_t X12 : 1; uint16_t X13 : 1; uint16_t X14 : 1; uint16_t X15 : 1; }X_Read_bit; struct { uint16_t A_Bigger_B : 1; uint16_t A_Equal_B : 1; uint16_t A_Smaller_B : 1; }Compare; int main() { printf("Please Enter A: "); scanf("%d" , &A); printf("Please Enter B: "); scanf("%d" , &B); A_Read_bit.A_Data = A; B_Read_bit.B_Data = B; X_Read_bit.X0 = (A_Read_bit.bits.A0 & B_Read_bit.bits.B0) | (~A_Read_bit.bits.A0 & ~B_Read_bit.bits.B0); X_Read_bit.X1 = (A_Read_bit.bits.A1 & B_Read_bit.bits.B1) | (~A_Read_bit.bits.A1 & ~B_Read_bit.bits.B1); X_Read_bit.X2 = (A_Read_bit.bits.A2 & B_Read_bit.bits.B2) | (~A_Read_bit.bits.A2 & ~B_Read_bit.bits.B2); X_Read_bit.X3 = (A_Read_bit.bits.A3 & B_Read_bit.bits.B3) | (~A_Read_bit.bits.A3 & ~B_Read_bit.bits.B3); X_Read_bit.X4 = (A_Read_bit.bits.A4 & B_Read_bit.bits.B4) | (~A_Read_bit.bits.A4 & ~B_Read_bit.bits.B4); X_Read_bit.X5 = (A_Read_bit.bits.A5 & B_Read_bit.bits.B5) | (~A_Read_bit.bits.A5 & ~B_Read_bit.bits.B5); X_Read_bit.X6 = (A_Read_bit.bits.A6 & B_Read_bit.bits.B6) | (~A_Read_bit.bits.A6 & ~B_Read_bit.bits.B6); X_Read_bit.X7 = (A_Read_bit.bits.A7 & B_Read_bit.bits.B7) | (~A_Read_bit.bits.A7 & ~B_Read_bit.bits.B7); X_Read_bit.X8 = (A_Read_bit.bits.A8 & B_Read_bit.bits.B8) | (~A_Read_bit.bits.A8 & ~B_Read_bit.bits.B8); X_Read_bit.X9 = (A_Read_bit.bits.A9 & B_Read_bit.bits.B9) | (~A_Read_bit.bits.A9 & ~B_Read_bit.bits.B9); X_Read_bit.X10 = (A_Read_bit.bits.A10 & B_Read_bit.bits.B10) | (~A_Read_bit.bits.A10 & ~B_Read_bit.bits.B10); X_Read_bit.X11 = (A_Read_bit.bits.A11 & B_Read_bit.bits.B11) | (~A_Read_bit.bits.A11 & ~B_Read_bit.bits.B11); X_Read_bit.X12 = (A_Read_bit.bits.A12 & B_Read_bit.bits.B12) | (~A_Read_bit.bits.A12 & ~B_Read_bit.bits.B12); X_Read_bit.X13 = (A_Read_bit.bits.A13 & B_Read_bit.bits.B13) | (~A_Read_bit.bits.A13 & ~B_Read_bit.bits.B13); X_Read_bit.X14 = (A_Read_bit.bits.A14 & B_Read_bit.bits.B14) | (~A_Read_bit.bits.A14 & ~B_Read_bit.bits.B14); X_Read_bit.X15 = (A_Read_bit.bits.A15 & B_Read_bit.bits.B15) | (~A_Read_bit.bits.A15 & ~B_Read_bit.bits.B15); Compare.A_Bigger_B = (A_Read_bit.bits.A15 & ~B_Read_bit.bits.B15) | (A_Read_bit.bits.A14 & ~B_Read_bit.bits.B14 & X_Read_bit.X15) | (A_Read_bit.bits.A13 & ~B_Read_bit.bits.B13 & X_Read_bit.X15 & X_Read_bit.X14) | (A_Read_bit.bits.A12 & ~B_Read_bit.bits.B12 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13) | (A_Read_bit.bits.A11 & ~B_Read_bit.bits.B11 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12) | (A_Read_bit.bits.A10 & ~B_Read_bit.bits.B10 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11) | (A_Read_bit.bits.A9 & ~B_Read_bit.bits.B9 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10) | (A_Read_bit.bits.A8 & ~B_Read_bit.bits.B8 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9) | (A_Read_bit.bits.A7 & ~B_Read_bit.bits.B7 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8) | (A_Read_bit.bits.A6 & ~B_Read_bit.bits.B6 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7) | (A_Read_bit.bits.A5 & ~B_Read_bit.bits.B5 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6) | (A_Read_bit.bits.A4 & ~B_Read_bit.bits.B4 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5) | (A_Read_bit.bits.A3 & ~B_Read_bit.bits.B3 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4) | (A_Read_bit.bits.A2 & ~B_Read_bit.bits.B2 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4 & X_Read_bit.X3) | (A_Read_bit.bits.A1 & ~B_Read_bit.bits.B1 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4 & X_Read_bit.X3 & X_Read_bit.X2) | (A_Read_bit.bits.A0 & ~B_Read_bit.bits.B0 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4 & X_Read_bit.X3 & X_Read_bit.X2 & X_Read_bit.X1); Compare.A_Smaller_B = (~A_Read_bit.bits.A15 & B_Read_bit.bits.B15) | (~A_Read_bit.bits.A14 & B_Read_bit.bits.B14 & X_Read_bit.X15) | (~A_Read_bit.bits.A13 & B_Read_bit.bits.B13 & X_Read_bit.X15 & X_Read_bit.X14) | (~A_Read_bit.bits.A12 & B_Read_bit.bits.B12 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13) | (~A_Read_bit.bits.A11 & B_Read_bit.bits.B11 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12) | (~A_Read_bit.bits.A10 & B_Read_bit.bits.B10 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11) | (~A_Read_bit.bits.A9 & B_Read_bit.bits.B9 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10) | (A_Read_bit.bits.A8 & B_Read_bit.bits.B8 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9) | (~A_Read_bit.bits.A7 & B_Read_bit.bits.B7 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8) | (~A_Read_bit.bits.A6 & B_Read_bit.bits.B6 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7) | (~A_Read_bit.bits.A5 & B_Read_bit.bits.B5 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6) | (~A_Read_bit.bits.A4 & B_Read_bit.bits.B4 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5) | (~A_Read_bit.bits.A3 & B_Read_bit.bits.B3 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4) | (~A_Read_bit.bits.A2 & B_Read_bit.bits.B2 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4 & X_Read_bit.X3) | (~A_Read_bit.bits.A1 & B_Read_bit.bits.B1 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4 & X_Read_bit.X3 & X_Read_bit.X2) | (~A_Read_bit.bits.A0 & B_Read_bit.bits.B0 & X_Read_bit.X15 & X_Read_bit.X14 & X_Read_bit.X13 & X_Read_bit.X12 & X_Read_bit.X11 & X_Read_bit.X10 & X_Read_bit.X9 & X_Read_bit.X8 & X_Read_bit.X7 & X_Read_bit.X6 & X_Read_bit.X5 & X_Read_bit.X4 & X_Read_bit.X3 & X_Read_bit.X2 & X_Read_bit.X1); Compare.A_Equal_B = (X_Read_bit.X0 & X_Read_bit.X1 & X_Read_bit.X2 & X_Read_bit.X3 & X_Read_bit.X4 & X_Read_bit.X5 & X_Read_bit.X6 & X_Read_bit.X7 & X_Read_bit.X8 & X_Read_bit.X9 & X_Read_bit.X10 & X_Read_bit.X11 & X_Read_bit.X12 & X_Read_bit.X13 & X_Read_bit.X14 & X_Read_bit.X15); printf("A_Bigger_B : %d \n A_Smaller_B: %d \n A_Equal_B : %d", Compare.A_Bigger_B, Compare.A_Smaller_B, Compare.A_Equal_B); } |
نفر ششم آقای سعید گرجی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | uint16_t zMax(uint16_t a, uint16_t b) { /* the idea is to make the cpu simulate something like a 16-bit digital comparator! */ uint16_t xor=0; uint16_t greater_a_indicator=0; uint16_t cyclic_or=0; uint16_t a_validator_mask=0; /* in fact, we need XNOR, but XOR simplifies the code */ xor = a ^ b; greater_a_indicator = a & ~b; /* append 1 instead of 0 in shift operations */ greater_a_indicator &= ~(xor >> 1) & ~(xor >> 2) & ~(xor >> 3) & ~(xor >> 4) & ~(xor >> 5) & ~(xor >> 6) & ~(xor >> 7) & ~(xor >> 8) & ~(xor >> 9) & ~(xor >> 10) & ~(xor >> 11) & ~(xor >> 12) & ~(xor >> 13) & ~(xor >> 14) & ~(xor >> 15); /* if greater_a_indicator is something other than zero, the “a” is bigger, otherwise “b” would be the return value (either “a” equals to “b” or “a” is less than “b”) */ /* OR all the bits of greater_a_indicator */ cyclic_or = ((greater_a_indicator >> 0) & (uint16_t)0x0001) | ((greater_a_indicator >> 1) & (uint16_t)0x0001) | ((greater_a_indicator >> 2) & (uint16_t)0x0001) | ((greater_a_indicator >> 3) & (uint16_t)0x0001) | ((greater_a_indicator >> 4) & (uint16_t)0x0001) | ((greater_a_indicator >> 5) & (uint16_t)0x0001) | ((greater_a_indicator >> 6) & (uint16_t)0x0001) | ((greater_a_indicator >> 7) & (uint16_t)0x0001) | ((greater_a_indicator >> 8) & (uint16_t)0x0001) | ((greater_a_indicator >> 9) & (uint16_t)0x0001) | ((greater_a_indicator >> 10) & (uint16_t)0x0001) | ((greater_a_indicator >> 11) & (uint16_t)0x0001) | ((greater_a_indicator >> 12) & (uint16_t)0x0001) | ((greater_a_indicator >> 13) & (uint16_t)0x0001) | ((greater_a_indicator >> 14) & (uint16_t)0x0001) | ((greater_a_indicator >> 15) & (uint16_t)0x0001); cyclic_or &= (uint16_t)0x0001; /* reproduce the least significant bit of cyclic_or to fill up the entire a_validator_mask bits */ a_validator_mask = (cyclic_or << 0) | (cyclic_or << 1) | (cyclic_or << 2) | (cyclic_or << 3) | (cyclic_or << 4) | (cyclic_or << 5) | (cyclic_or << 6) | (cyclic_or << 7) | (cyclic_or << 8) | (cyclic_or << 9) | (cyclic_or << 10) | (cyclic_or << 11) | (cyclic_or << 12) | (cyclic_or << 13) | (cyclic_or << 14) | (cyclic_or << 15); return (a & a_validator_mask) | (b & ~a_validator_mask); } |
نفر هفتم آقای رسول بیرانوند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <stdint.h> unsigned int zMax( unsigned int x ,unsigned int y ){ unsigned int a=0,b=0; unsigned int Arr[2]={0x0,0xffff}; unsigned int flag=0; unsigned int large =0; a = x & (1<<15); a >>= 15; b = y & (1<<15); b >>= 15; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<14); a >>= 14; b = y & (1<<14); b >>= 14; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<13); a >>= 13; b = y & (1<<13); b >>= 13; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<12); a >>= 12; b = y & (1<<12); b >>= 12; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<11); a >>= 11; b = y & (1<<11); b >>= 11; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<10); a >>= 10; b = y & (1<<10); b >>= 10; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<9); a >>= 9; b = y & (1<<9); b >>= 9; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<8); a >>= 8; b = y & (1<<8); b >>= 8; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<7); a >>= 7; b = y & (1<<7); b >>= 7; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<6); a >>= 6; b = y & (1<<6); b >>= 6; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<5); a >>= 5; b = y & (1<<5); b >>= 5; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<4); a >>= 4; b = y & (1<<4); b >>= 4; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<3); a >>= 3; b = y & (1<<3); b >>= 3; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<2); a >>= 2; b = y & (1<<2); b >>= 2; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<1); a >>= 1; b = y & (1<<1); b >>= 1; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; a = x & (1<<0); a >>= 0; b = y & (1<<0); b >>= 0; flag = a ^ b; flag = (~flag) & 1; x &= Arr[a | flag]; y &= Arr[b | flag]; large = x | y; return large; } |
نفر هشتم آقای مهدی راهی:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 | #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <stdint.h> uint16_t find_bigger_value(const uint16_t a, const uint16_t b); // uint32_t multiply(const uint16_t a, const uint16_t b); uint32_t assist_Multiply(const uint16_t a, const uint16_t* const b); // uint32_t addition(const uint32_t x, const uint32_t y); uint32_t assist_Addition(uint32_t* const a, uint32_t* const b, uint32_t* const positiveCarry); // uint32_t subtraction(const uint32_t x, const uint32_t y); uint32_t assist_Subtraction(uint32_t* const a, uint32_t* const b, uint32_t* const negativeCarry); uint16_t zMax( uint16_t a ,uint16_t b ) { return find_bigger_value(a,b); } 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<0xFFFF;A++) { for(int B=0;B<0xFFFF;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 EXIT_SUCCESS; } } } } printf("\r\n END."); return EXIT_SUCCESS; } uint16_t fi |