摘要:
描述求2个数中较大者。 输入第一行为测试的数据组数N,接下来的N行分别是两个待比较的整数输出输出N行,每一行的值为每组数中较大的整数样例输入21 215 10样例输出215#include<iostream.h>using namespace std;int main(){ int N,a,b; cin>>N; while(N--) { cin>>a>>b; if(a>b) cout<<a; else cout<<b; cout<<endl; ... 阅读全文
摘要:
描述求两个整数之和。输入输入数据只包括两个整数A和B。输出两个整数的和。样例输入1 2样例输出3#include <stdio.h> int main() { int a,b; scanf("%d %d",&a, &b); printf("%d\n",a+b); return 0; } 阅读全文
摘要:
可变位宽的符号扩展: 有时,我们需要扩展数字的符号位,但是我们不知道该数字的总位数,如果用b表示(或者我们可能会使用类似于java这样缺乏位域的语言编程)unsigned b; // 表示数x的位数int x; //将这个b位数符号扩展到r位int r; // 保存r位数字int const m = 1U << (b - 1); // 如果b固定,中间量可以提前计算x = x & ((1U << b) - 1); // (Skip this if bi... 阅读全文
摘要:
计算机的内嵌类型进行自动的符号扩展,比如char与int类型等等,但是也许你遇到一个有符号的二进制补码数x,并且使用仅仅b位,更进一步,也许你需要将x转化为整型,如果x为正数,一个简单的复制操作就可以搞定,但是如果为负数,符号位必须扩展。例如:假如我们仅仅用4位来存储一个数,于是-3用二进制就表示为1101,如果我们用8位,那么-3就表示为11111101.最值得注意的位是4位的相关数使用更多位数在左边进行填充,这被称为“符号扩展”,在C语言中,符号扩展对于固定长度的数很普通,因为位域可能是结构体或是联合体,例如:将5位数转换为全整型:int x; //待转换的数int r; //... 阅读全文
摘要:
unsigned int v; // 判断v是否为2的幂bool f; // f为判断的结果f = (v & (v - 1)) == 0; // 结果为0表示不是2 的幂// 改变表示方法,可以使用下面的方法:f = v && !(v & (v - 1)); 阅读全文
摘要:
不用选择分支找出指定两整数中的最大值与最小值:int x; int y; // 找出x与y的最大值与最小值int r; // r保存结果r = y ^ ((x ^ y) & -(x < y)); // min(x, y)在一些很少的机器上,分支比较很耗资源,而且没有条件移动指令存在,以上的实现可能比传统的方法:r = (x < y) ? x : y要快。即使比后者多执行两步指令。(通常,前面的方法要快)它的工作原理如下:如果x<y,那么-(x-y)全部为1, 结果r= y ^ (x ^ y) & ~0 = y ^ x ^ y = x.否则,如果x>=y, 阅读全文
摘要:
判断两整数是否异号:int x, y; //输入比较的两数bool f = ((x ^ y) < 0); // 返回真,当且仅当x与y异号说明:当x、y异号,x与y的最高位分别为0和1,取"^"后为1,结果为负数不用选择语句得到指定整数的绝对值:int v; // 需要得到整数v的绝对值unsigned int r; // r保存结果int const mask = v >> sizeof(int) * CHAR_BIT - 1;r = (v + mask) ^ mask; 变式:r = (v ^ mask) - mask; 阅读全文
摘要:
关于衡量计算操作的方法: 当为算法统计操作的数量的时候,所有的C运算符被认为是一样的操作。中间过程不被写入随机存储器(RAM)而不被计算,当然,这种操作数的计算方法,只是作为那些接近机器指令和CPU运行时间的服务。所有的操作被假设成花相同的运行时间,事实上是不正确的。有很多不同的因素决定一个系统能多快运行一段样例代码,例如:缓存大小,内存带宽,指令集合等等……。最后,建立一套标准才是衡量一种方法快过另一种方法的最好方法。 判断一个整数的符号int v; // v为我们要判断的整数int sign; // 保存结果 sign = -(v < 0); // if v < 0 si... 阅读全文
摘要:
int**malloc2d(intr,intc){inti;int**t=malloc(r*sizeof(int*));for(i=0;i<r;i++)t[i]=malloc(c*sizeof(int));returnt;}int**a=malloc2d(M,N)ps:矩阵相乘for(i=0;i<N;i++)for(j=0;j<N;j++)for(k=0,c[i][j]=0.0;k<N;k++) c[i][j]+=a[i][k]*b[k][j]; 阅读全文
摘要:
#include<stdio.h>#include<stdlib.h>typedefstructnode*link;structnode{intitem;linknext;};intmain(){inti,N,M;scanf("%d%d",&N,&M);linkt=malloc(sizeof*t),x=t;t->item=1;t->next=t;for(i=2;i<=N;i++){x=(x->next=malloc(sizeof*x));x->item=i;x->next=t;}while(x!=x 阅读全文