1、unsigned int 类型的数据与int类型的数据运算后自动转化为unsigned int 类型。
比如说-20和6运算后就会变成一个很大的数;
下面解释一个判断语句:
(a+b>6)?{
c=1
}:(c=0);
具体的意思就是如果a+b>6则c+1,否则C=0;
// %f.2:表示的意思是小数点后保留几位;
2、隐式类型转换:
在混合类型的算式表达式中,最宽的数据类型肩负起了目标转换类型的责任,
这被称为算术转换。(Arithmetic Conversion)
int ab = 4;
double ab = 4.111;
此时ab=4.0;
表达式不同类型间的赋值】
在这时候目标转换类型是被赋值的对象,
用一个表达式传递给一个函数,表达式类型和形参类型不同: 此时的目标值是形参的值;
function momo(double) momo(2) 结果值是double type;
函数返回值和i形参不同type
double difference(int );
目标类型为函数返回值类型;
3、 i?i
itn i = 3,j = 4;
i?i++;++j;
printf("%d %d\n",i,j); the answer is 4,4;
等价于:(
if(i=true){
i++
}else{
++j;
}
)
4、很纠结的式子,:i++j;
mean is :first:i++;
next: +j;
5、最扯淡的分析,
x = x+1; x+=1;x++ 这三个式子哪个效率最高:
从她得执行过程分析:
第一个:先读取右X地址
X+1;
读取做X的地址;
将右值传给左边的X;
第二个:读取右X的地址;
x+1
得到值传给X(X地址早已经读出);
第三个:效率最高
读取有X的地址;
X自增1.
6、编程规范方面:
‘A’==a比a=='A'合适: because 常量是不能被赋值的少写一个‘=’时能检查出错误
7、a、b交换:(神奇的算最大值的方法)
扩展:abs( int x )是求整数的绝对值的 ,
fabs( double x )是精确到双精度浮点型的求绝对值的
简单的说就是保留的精度位数更高
求两个数中最大的那个:
int max = ((a+b)+abs(a-b))/2(so牛逼);
int c = a-b;
char *strs[2] = {"a大","b大"};
c = unsigned(c)>>(sizeof(int)*8-1) ;
c=a-b,假如a<b的话,c为负数,转换为无符号数的话,最高位将是1
第二句c=unsigned(c)>>(sizeof(int)*8-1);就是求c的最高位,
之后只要判断是否为1就可以知道a和b哪个大了
----0、真正的交换来啦:
不用中间变量交换:a、b;
a^b 表示 a 和b 进行 异或运算
a=a^b;
b=a^b;
a=a^b;
8、c、c++的区别;
(1)、c++支持函数的重载,c不支持,c++中的 void foo(int x,int y).
被C编译后就成了 void _foo();
(2)、头文件中的ifndef、define、endif是防止头文件被重复引用的!!
(3)、<filename.h>是在标准库路径开始搜索的
"filename.h"是从用户的工作路径开始搜索的!!
9、如何判断一段程序是C还是C++;
1、C是void main()而标准C++是int main() ;
2、文件就不同
c++有输入输出流文件即#include<iostream>
c用的是scanf 和printf
而c++用的是cout 和cin
3、c++有类的定义,c是没有的
4、C++在编译时定义了_cplusplus,C编译时定义了_STDC.
10、主函数想不到的地方,
在main函数退出执行之后,可以使用atexit()函数注册一个函数,
注意需要<stdlib.h>文件;