计算机中为什么使用补码进行运算;什么是内置函数?它的主要作用是什么?如何声明内置函数?;C++在什么情况下会进行隐式类型转换;螺旋队列;

计算机处理加法运算逻辑
正数的原码,反码,补码都相同,负数的原码,反码,补码都不同。
[x]补码+[y]补码=[x+y]补码,如果结果是正数,正数补码等于原码,如果是负数再转化成原码([x]原码=[[x]补]补)
什么是补码,及计算方法
第一步,符号位不变,其余每一个二进制位都取相反值,0变成1,1变成0。比如,(-8)10001000的相反值就是11110111。
第二步,将上一步得到的值加1。11110111就变成11111000。
也就是说,-8在计算机(8位机)中就是用11111000表示。
为什么要引入补码
   00010000(16)
+11111000(-8)补码
---------
100001000(8)补码=(8)原码
可以看到,按照正常的加法规则,得到的结果是10001000。注意,这是一个9位的二进制数。我们已经假定这是一台8位机,
因此最高的第9位是一个溢出位,会被自动舍去。
   00001000(8)补码
+11110000(-16)补码
---------
   11111000(-8)补码-->((-8)补)补=(10001000)-8(符号位不变,其余为取反+1)
  计算机中为何使用补码
数的原码表示形式简单,适用于乘除运算,但用原码表示的数进行加减法运算比较复杂,引入补码之后,减法运算可以用加法来
实现,且数的符号位也可以当作数值一样参与运算,因此在计算机中大都采用补码来进行加减法运算

什么是内置函数?它的主要作用是什么?如何声明内置函数?

嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 
它的作用:提高程序的执行效率。 
声明内置函数:只需在函数首行的左端加一个关键字inline即可。	
内置函数就是内联函数
C++定义了一组内置类型对象之间的标准转换,在必要时他们被编译器隐式地应用对象上
1.在混合类型的算术表达式的,在这种情况下最宽的数据类型成为目标转换的类型,这也被称为算术转换
	int ival = 3;
	doble vdal = 3.14159;
	//ival被提升为double类型:3.0
	ival + dval;
2.用一种类型的表达式赋值给另一种类型的对象
在这种情况下目标转换类型是被赋值对象的类型。
	//0被转换成int * 类型的空指针
	int * pi = 0;
	//dval被截取为int 值3
	ival = dval;
3.把一个表达式传递给一个函数,调用表达式的类型与形式参数的类型不同		
	extern double sqrt(double)
	//2.被提升为double类型:2.0
	cout<<sqrt(2)<<endl;
4.从一个函数返回一个表达式的类型与返回类型不同,这种情况下返回的表达式类型自动转换成函数类型
	double difference (int a,int b)
	{
		//返回值被提升为double类型
		return a-b;
	}
#include<iostream>
using namespace std;
#define max(a,b)  ((a) > (b)? (a): (b))   //这里的几个括号很重要,以及下面两行的括号
#define abs(a) ((a) > 0 ? (a): -(a))
#define pingfang(p) ((p)*(p))
int luoxuan(int x, int y)
{
 	int t = max(abs(x), abs(y));   //相当于max(|x|,|y|);
 	int v = 0;
 	if (x == -t)
 	{
 	 	v = pingfang(2 * t - 1) + 5 * t - y;
 	}
 	else if (y == t)
 	{
 		 v = pingfang(2 * t - 1) + 3 * t - x;
 	}
 	else if (y == -t)
 	{
 		 v = pingfang(2 * t - 1) + 7 * t + x;
 	}
 	else if (x == t)           //这个必须放到最后,等其他都判断完毕之后在判断这个,因为存在一个从最大到最小的问题
 	{
 		 v = pingfang(2 * t - 1) + t + y;
 	}
 	return v;
}
int main()
{
 	int x, y;
 	for (int i = -4; i <= 4; ++i)
 	{
 		 for (int j = -4; j <= 4; ++j)
  		{
   			cout << luoxuan(j, i);   //打印的话注意这里的顺序 j , i
   			cout << "\t";
  		}
  		cout << endl;
 	}
 	cin >> x >> y;   //注意输入的格式
 	cout << "你所要求的坐标上数字是:"<<luoxuan(x, y) << endl;
 	return 0;
}

//附带原文链接,我是看了人家的code才明白的
https://blog.csdn.net/forgotaboutgirl/article/details/6780548
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值