diff --git a/BinaryNumbers/BinaryNumbers.sln b/BinaryNumbers/BinaryNumbers.sln
new file mode 100644
index 0000000..6eda164
--- /dev/null
+++ b/BinaryNumbers/BinaryNumbers.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BinaryNumbers", "BinaryNumbers\BinaryNumbers.vcxproj", "{5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Debug|x64.ActiveCfg = Debug|x64
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Debug|x64.Build.0 = Debug|x64
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Debug|x86.ActiveCfg = Debug|Win32
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Debug|x86.Build.0 = Debug|Win32
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Release|x64.ActiveCfg = Release|x64
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Release|x64.Build.0 = Release|x64
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Release|x86.ActiveCfg = Release|Win32
+ {5C800CDD-E117-44CE-B92D-4BB73C1CE4E6}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {0862E17A-C16E-473A-A416-F533D44A449A}
+ EndGlobalSection
+EndGlobal
diff --git a/BinaryNumbers/BinaryNumbers/BinaryNumbers.vcxproj b/BinaryNumbers/BinaryNumbers/BinaryNumbers.vcxproj
new file mode 100644
index 0000000..59488c8
--- /dev/null
+++ b/BinaryNumbers/BinaryNumbers/BinaryNumbers.vcxproj
@@ -0,0 +1,147 @@
+
+
+
+
+ Debug
+ Win32
+
+
+ Release
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release
+ x64
+
+
+
+ 16.0
+ Win32Proj
+ {5c800cdd-e117-44ce-b92d-4bb73c1ce4e6}
+ BinaryNumbers
+ 10.0
+
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+ Application
+ true
+ v143
+ Unicode
+
+
+ Application
+ false
+ v143
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+
+
+ false
+
+
+ true
+
+
+ false
+
+
+
+ Level3
+ true
+ WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+ Level3
+ false
+ _DEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+
+
+
+
+ Level3
+ true
+ true
+ true
+ NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ true
+
+
+ Console
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BinaryNumbers/BinaryNumbers/BinaryNumbers.vcxproj.filters b/BinaryNumbers/BinaryNumbers/BinaryNumbers.vcxproj.filters
new file mode 100644
index 0000000..669bc4e
--- /dev/null
+++ b/BinaryNumbers/BinaryNumbers/BinaryNumbers.vcxproj.filters
@@ -0,0 +1,22 @@
+
+
+
+
+ {4FC737F1-C7A5-4376-A066-2A32D752A2FF}
+ cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx
+
+
+ {93995380-89BD-4b04-88EB-625FBE52EBFB}
+ h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd
+
+
+ {67DA6AB6-F800-4c08-8B7A-83BB121AAD01}
+ rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms
+
+
+
+
+ Исходные файлы
+
+
+
\ No newline at end of file
diff --git a/BinaryNumbers/BinaryNumbers/main.c b/BinaryNumbers/BinaryNumbers/main.c
new file mode 100644
index 0000000..cf184dc
--- /dev/null
+++ b/BinaryNumbers/BinaryNumbers/main.c
@@ -0,0 +1,168 @@
+#include
+#include
+#include
+#include
+
+int scanOne();
+void print(int number);
+
+int binaryToDecimal(bool *binaryNumber)
+{
+ int multiplier = 1;
+ int number = 0;
+ for (int i = 11; i >= 0; --i) {
+ number += multiplier * binaryNumber[i];
+ multiplier = multiplier << 1;
+ }
+
+ return binaryNumber[0] ? number - 4096 : number;
+}
+int sizeBinary(int number) {
+ int size = 0;
+ while (number) {
+ number = number >> 1;
+ ++size;
+ }
+ return size;
+}
+
+void translateDecimalToBinary(bool *binaryNumber, int size, int number) {
+ for (int i = 11; i >= 12 - size; --i) {
+ binaryNumber[i] = (number & 1);
+ number = number >> 1;
+ }
+}
+
+void printArrayBinary(bool *binaryNumber, int size, int maxPow2) {
+ for (int i = maxPow2 - size; i < maxPow2; ++i) {
+ printf("%d", binaryNumber[i]);
+ }
+ printf("\n");
+}
+
+void sumToBinary(bool *binaryNumber1, bool *binaryNumber2, bool binaryNumber3[], int size1, int size2) {
+ bool pastSum = false;
+ int i = 11;
+ int size3 = 0;
+
+ while (i >= 0) {
+ if (binaryNumber1[i] && binaryNumber2[i] && !pastSum || !binaryNumber1[i] && binaryNumber2[i] && pastSum || binaryNumber1[i] && !binaryNumber2[i] && pastSum) {
+ binaryNumber3[i] = false;
+ pastSum = true;
+ } else if (binaryNumber1[i] && binaryNumber2[i] && pastSum) {
+ binaryNumber3[i] = binaryNumber1[i] + binaryNumber2[i] + pastSum;
+ pastSum = true;
+ } else {
+ binaryNumber3[i] = binaryNumber1[i] + binaryNumber2[i] + pastSum;
+ pastSum = false;
+ }
+ if (binaryNumber3[i]) {
+ size3 = 12 - i;
+ }
+ --i;
+ }
+
+ if (binaryNumber1[0] && binaryNumber2[0]) {
+ binaryNumber3[0] = true;
+ size3 = 12;
+ }
+}
+
+int toChangeNegativeNumbers(int number) {
+ return number < 0 ? 4096 + number : number;
+}
+
+bool testStandart(void) {
+ int size1 = sizeBinary(12);
+ int size2 = sizeBinary(13);
+ bool* binaryNumber1 = (bool*)calloc(12, sizeof(int));
+ bool* binaryNumber2 = (bool*)calloc(12, sizeof(int));
+ translateDecimalToBinary(binaryNumber1, size1, 12);
+ translateDecimalToBinary(binaryNumber2, size2, 13);
+ bool* binaryNumber3 = (bool*)calloc(12, sizeof(int));
+ sumToBinary(binaryNumber1, binaryNumber2, binaryNumber3, size1, size2);
+ free(binaryNumber1);
+ free(binaryNumber2);
+ int result = binaryToDecimal(binaryNumber3);
+ free(binaryNumber3);
+ return result == 25;
+}
+
+bool testNotStandart() {
+ int number1 = toChangeNegativeNumbers(1001);
+ int number2 = toChangeNegativeNumbers(-1002);
+ int size1 = sizeBinary(number1);
+ int size2 = sizeBinary(number2);
+ bool* binaryNumber1 = (bool*)calloc(12, sizeof(int));
+ bool* binaryNumber2 = (bool*)calloc(12, sizeof(int));
+ translateDecimalToBinary(binaryNumber1, size1, number1);
+ translateDecimalToBinary(binaryNumber2, size2, number2);
+ bool* binaryNumber3 = (bool*)calloc(12, sizeof(int));
+ sumToBinary(binaryNumber1, binaryNumber2, binaryNumber3, size1, size2);
+ free(binaryNumber1);
+ free(binaryNumber2);
+ int result = binaryToDecimal(binaryNumber3);
+ free(binaryNumber3);
+ return result == -1;
+}
+
+int main() {
+ setlocale(LC_ALL, "RUS");
+
+ if (!testStandart() || !testNotStandart()) {
+ printf("%s", " \n");
+ return 0;
+ } else {
+ printf("%s", " \n");
+ }
+
+ printf("%s", " , . 2048 \n");
+ int number1 = scanOne();
+ while (abs(number1) >= 2048) {
+ printf("%s\n", " ! ");
+ number1 = scanOne();
+ }
+ int number2 = scanOne();
+ while (abs(number2) >= 2048 || abs(number1 + number2) >= 2048) {
+ printf("%s\n", " ! ");
+ number1 = scanOne();
+ number2 = scanOne();
+ }
+ number1 = toChangeNegativeNumbers(number1);
+ number2 = toChangeNegativeNumbers(number2);
+ int size1 = sizeBinary(number1);
+ int size2 = sizeBinary(number2);
+ bool *binaryNumber1 = (bool*)calloc(12, sizeof(int));
+ bool *binaryNumber2 = (bool*)calloc(12, sizeof(int));
+ translateDecimalToBinary(binaryNumber1, size1, number1);
+ translateDecimalToBinary(binaryNumber2, size2, number2);
+ printArrayBinary(binaryNumber1, size1, 12);
+ printArrayBinary(binaryNumber2, size2, 12);
+ int size3 = 12;
+ bool *binaryNumber3 = (bool*)calloc(12, sizeof(int));
+ sumToBinary(binaryNumber1, binaryNumber2,binaryNumber3, size1, size2);
+ printArrayBinary(binaryNumber3, size3, 12);
+ printf("%d", binaryToDecimal(binaryNumber3));
+ free(binaryNumber1);
+ free(binaryNumber2);
+ free(binaryNumber3);
+}
+
+void print(int number) {
+ printf("%d\n", number);
+}
+
+int scanOne() {
+ int number = 0;
+ int checkScanf = scanf("%d", &number);
+
+ while (checkScanf != 1) {
+ while (getchar() != '\n') {
+ }
+
+ printf("%s", "... \n");
+ checkScanf = scanf("%d", &number);
+ }
+
+ return number;
+}
\ No newline at end of file