C和C++中<<是什么意思,有什么区别?
代码见这里,这是NOIP 2007复赛提高组第4题 树网的核
题目可以看BAIDU上的
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733699cc7150881c55f93130a1d5a33abeb3a7a4359929f272557b21501b1b561222a0126a09bbece1395f08f5452f34560375dd51a0fd31badce5b25c322954d98de0e90b9e74299b9a4a7c82256dd240e6df0fa9c2a0603bb65e76040f4d7ea5f635907cb9c2712ff4e775ec5651fa202a4a064615bdcad9f4b4cb27b8d2146&p=882a9f06829c1ffc57edc56553&user=baidu
(地址请复制到地址栏上,太长了...)
我想请问
其中的const int inf=(1<<29);
FOR(k,st,ed) min <?= d[u][p[k]];
ans>?=min;
是什么意思?是什么用法?尤其是那个<<,>?=
非常感谢!
新:这段代码好象是C的,是标准答案,好多答案都是1<<29之类的,请问这里何必要这样?数字好象超出范围了... 展开
<<和>>在c中是用来做位运算的,在C++中被重载了,即可以做位运算也可以做输入输出流。
区别如下:
1、应用场合不同:
C语言是结构化和模块化的语言,是面向过程的。当程序的规模较小时,C语言运用起来得心应手。但是当问题比较复杂、程序的规模比较大的时候,C语言就会展现出它的局限性;
正是因为有大规模的程序需要去处理,C++就应运而生了。C++是由C发展而来的,与C语言兼容。C++既可用于面向过程的结构化程序设计,也可用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。
2、输入/输出函数不同:
C语言:inta=1;doubled=3.1415926;printf("%d\n",a);
printf("a=%d\n",a);printf("b=%6.3f, b=%6.2f, b=%.3f\n",b,b,b);scanf("%d",&a);//取地址,输入a的值,%d和%f称为格式说明符,表示以此格式输出对应表达式的值,\n表示换行。
%6.3f中的6表示占六列,表示输出对应浮点表达式值时只输出三位小数。
C++:int a=5;float b;cout << "a="<cin >>b;
cout必须要和”<<“一起使用,cin必须要和”>>“一起使用。
得C++中的输入输出流是很强大的,不像C里面还要指定格式,endl表示换行。
3、字符串不同:
C语言,chara[20]="hangzhou";char*p="hangzhou";C++:strings1="abcd";strings2="helloworld";strings3=s1+s2;s1=s2;
c++比c更方便许多。
C语言中所有的头文件都带后缀 .h(比如stdio.h)C++中有系统提供的头文件不带后缀 .h,用户自己编制的头文件可以有后缀 .h。
structStudent//声明了一个名为Student的结构体类型:
{intnum;charname[20];charsex;};
Studentstud1,stud2;//定义了两个结构体变量,默认情况下为public类型。
C++中的类将数据和操作封装在一起,并且指定了访问权限。如果不指定public,也不指定private,则系统就默认为私有的,这一点和C语言中的结构体是不一样的。
其实总的来说,C语言和c++,他们除了表现在使用场合不同,还有更多的是语法的不同,C语言更加注重过程,c++比C语言更高一级。
扩展资料:
从语言特性角度上来看,C++是C的超集。
在(C++)-C的这部分语言特性中有很多会降低执行效率。一个例子是dynamic_cast,执行一个dynamic_cast要消耗100-300个CPUcycles,因为机器要跳到一段特别的snippet(一小段程序)去检查typeinheritance。
除了语言特性,通常比较语言也会比较它们的标准数据库。
例如C++中std::sort函数肯定比C语言中的qsort快(因为templatefunction的优点),但是C++中的iostream系列又比C的printf系列慢几乎3倍。
但是由于C++标准库功能比C语言大得多,许多时候可以用较少的开发时间就在C++中实现相同的算法。
另外,不同编译器对语言的执行效率影响也很大。
参考资料:百度百科-C语言
<<是左移位运算符,每移一位相当于*2,当然比乘法快的,在C中总是要选择最快的。
>?= 没有看出来,我想这段代码不是标准c++的,如果真是这样的话a>?=b的意思就应该是a=a>b?a:b的一种简略形式,使用这种表达应该能够得到优化的,会更快一点的。
当然没有超出范围了,在32位机里int是32位的,29位是不会超出范围的,这样做就是因为习惯了这种写法了吧,因为在变量的时候<<比乘法要快的,所以习惯了,常量也这样写了
C中:
<<可作为左移算符 (向左移一位,右边自动补0)
10001011 << 1=
00010110 = 22
相当于二进制的每个数都变成当前值的两倍,结果就是变成当前值的两倍,速度比乘法快。
n * 2 == (n << 1)
C++中:
<<单用可作为左移算符
cout << 可作为输出使用,相当于prinf
本例中1用32位的2进制表示为00...31个0...1,<<表示所有的数字向左移29位,溢出的抛去,补入的用0补全,即001000...29个0...,化为十进制也就是2^29。