c语言 基本的加法、移位编写程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 基本的加法、移位编写程序相关的知识,希望对你有一定的参考价值。

你能用基本的加法、移位等操作编写一个sin、cos、tan、arcsin、arccos、arctan、log、ln、y的x次方、x的平方、x的倒数、(2、8、10、16)进制之间相互转换的程序吗?

参考技术A 用cordic算法可以实现

坐标旋转数字计算机CORDIC(COordinate Rotation DIgital Computer)算法,通过移位和加减运算,能递归计算常用函数值,如Sin, Cos,Sinh,Cosh等函数,由J. Volder于1959年提出 ,首先用于导航系统,使得矢量的旋转和定向运算不需要做查三角函数表、乘法、开方及反三角函数等复杂运算。J. Walther在1974年用它研究了一种能计算出多种超越函数的统一算法 。

详见:http://baike.baidu.com/view/1800964.html?wtp=tt本回答被提问者采纳
参考技术B 理论上都是可以的,把这些函数的级数展开式写出来后,就可以转换成全是加法和乘法操作了.乘法又可以转换成加法. 参考技术C 计算机如何实现sin、cos、tan、arcsin、arccos、arctan、log、ln、y的x次方、x的平方、x的倒数????

只不过就是把他们的数学算法写成程序。
三角函数基本都可以表示成数列的和的形式。
如果题目不给算法,有几个人能做出来??谁吃撑了去记这种东西。
如果给出了算法,还会写不出来吗??
参考技术D 值得鼓励,我也不会,建议不是搞研究的用不着学这些东西。 第5个回答  2009-04-23 貌似这是机器干的事

c语言中的移位运算符

      移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。
c语言中提供了两种移位运算符:
左移运算符:<<
右移运算符:>>

左移运算符(<<)
int main(void)
{
	int a = 4;
	//把a的二进制位向左移动1位
	int b = a << 1;
	printf("b = %d", b);
	return 0;
}

     在32位操作系统中,int类型占4个字节,1个字节有8bit,所以变量a在内存中占32个比特位。
将4赋值给变量a,a中存放的是4的二进制形式。
在这里插入图片描述
将a向左移动一位
在这里插入图片描述
最高位的0丢弃,末位补0
在这里插入图片描述
可以看到a左移一位后的结果是1000,转换成10进制就是8,所以打印b的结果就是8。
在这里插入图片描述

右移运算符(>>)
int main(void)
{
	int a = 10;
	//把a的二进制位向右移动1位
	int b = a >> 1;
	printf("b = %d", b);
	return 0;
}

把10赋值给变量a,将10表示成二进制形式
在这里插入图片描述
将10向右移动一位,最低位的0丢弃
在这里插入图片描述
最高位补0
在这里插入图片描述
最后的结果转换成10进制就是5
在这里插入图片描述
我们可以看到最后打印b的结果确实是5。

这里需要注意的是,右移分为算数右移和逻辑右移
算数右移: 右边丢弃,左边补原符号位
逻辑右移: 右边丢弃,左边补0
内存中存放二进制序列的时候,最高位是0表示正数,最高位是1表示负数。
因为10是正数,所以无论是算数右移还是逻辑右移,最高位都是补0。那么这里的右移运算到底是算数右移还是逻辑右移呢?
整数的二进制表示形式有三种:原码、反码、补码
原码:直接根据数值写出的二进制序列
反码:原码的符号位不变,其他位按位取反
补码:反码加1
计算机内存数值存储方式是补码

int main(void)
{
	int a = -1;
	//把a的二进制位向右移动1位
	int b = a >> 1;
	printf("b = %d", b);
	return 0;
}

以-1为例
-1的原码:在这里插入图片描述
-1的反码:
在这里插入图片描述
-1的补码:
在这里插入图片描述
因为计算机中存储的是补码,将-1右移1位,最低位的1舍弃
在这里插入图片描述
先来看b的打印结果
在这里插入图片描述
b的值为-1,说明最高位补的是1,此时进行的是算数右移。
需要注意的是,虽然a进行了右移操作,但是a的值是不发生改变的,我们可以将a也打印出来

int main(void)
{
	int a = 10;
	//把a的二进制位向右移动1位
	int b = a >> 1;
	printf("a = %d\\n", a);
	printf("b = %d", b);
	return 0;
}

在这里插入图片描述
a的结果仍然是10。

int a = 10;
int b = a + 1;

和上面的代码是一样的,在进行移位运算的时候,移位对象的值并不会发生改变

以上是关于c语言 基本的加法、移位编写程序的主要内容,如果未能解决你的问题,请参考以下文章

用汇编语言编写一段程序实现两个六位的十进制数的加法,把运算结果显示在屏幕上

如何用C语言编写一个求两数相加得和的小程序。

用C语言编写程序:键盘输入a和b两个整数,要求用函数求两个数之和,在主函数main()中输出

c语言简单求和,编写程序:输入两个数,求两个数的和

请你简单阐述用C语言编写一个模块化程序的基本过程

用c语言编写modbus程序