C语言面试题 unsigned int ,i?i, ab 交换

来源:互联网 发布:化妆品网络营销策划 编辑:程序博客网 时间:2024/06/07 01:00
1、unsigned int 类型的数据与int类型的数据运算后自动转化为unsigned int 类型。
   比如说-20和6运算后就会变成一个很大的数;
  
  下面解释一个判断语句:
   (a+b>6)?{
      c=1

   }:(c=0);
   具体的意思就是如果a+b>6则c+1,否则C=0;
  // %f.2:表示的意思是小数点后保留几位;
  
[color=orange]2、隐式类型转换:[/color]
在混合类型的算式表达式中,最宽的数据类型肩负起了目标转换类型的责任,
   这被称为算术转换。(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>文件;