PracticeDev/study_clang/BitArithmetic/bitCal.c

106 lines
2.4 KiB
C
Raw Normal View History

2022-12-20 17:31:11 +08:00
/*************************************************************************
> File Name: bitCal.c
> Author: TL Song
> Mail: songtianlun@frytea.com
> Created Time: Fri 28 Aug 2020 12:58:40 AM UTC
************************************************************************/
#include<stdio.h>
#include <stdio.h>
/*
*:
*@num1, @num2
* : num的相加后的值
*/
int Add(int num1, int num2)
{
int exclusive_val = num1; //异或值
int carry_val = num2; //进位值
exclusive_val = num1 ^ num2; //取第一次异或值(没有进位的异或就是相加)
carry_val = (num1 & num2) << 1; //取第一次进位值
//进位值为0是循环终止条件
while (carry_val)
{
int temp = exclusive_val;
exclusive_val = exclusive_val ^ carry_val; //异或值与进位值进行异或
carry_val = (temp & carry_val) << 1;
}
return exclusive_val;
}
/*
*:
*: A - B = A + B() = A + (B反码 + 1) = A + (~B + 1)
*@num1 @num2
*:
*/
int Sub(int num1, int num2)
{
int temp = Add(~num2, 1); //取反与求补差1
return Add(num1, temp);
}
/*
*:
*: A B A里有多少个BA - B实现
* A一直循环减B0
*@num1 @num2
*:
*/
int div(int num1, int num2)
{
int count = 0;
while (1)
{
if ((num1 = Sub(num1, num2)) < 0)
{
break;
}
count++;
}
return count;
}
/*
*:
*: A B A个B累加count = 1
* A次累加B相加实现
*@num1 @num2
*:
*/
int mult(int num1, int num2)
{
int count = 0;
int result = 0;
int temp = num2;
while (1)
{
if (num1 == count)
{
break;
}
result = Add(result, temp);
count++;
}
return result;
}
int main(void)
{
int num1, num2;
while (1)
{
printf("请输入两个整数: \n");
scanf("%d%d", &num1, &num2);
printf("%d + %d = %d\n", num1, num2, Add(num1, num2));
printf("%d - %d = %d\n", num1, num2, Sub(num1, num2));
printf("%d * %d = %d\n", num1, num2, mult(num1, num2));
printf("%d / %d = %d\n", num1, num2, div(num1, num2));
}
return 0;
}