C语言学习日记 2

 在使用代码的时候使用了 gcc 即编译代码,这个过程编译器只进行语法的检查,只要没有语法错误就不会报错,也就是说 编译器只看语法不管逻辑。第二部分的./a.out 这部分则是只属于逻辑问题的检查。若是报错则是程序的逻辑出现问题。

eg: 与数学中学到的一样,算数运算       /    除法的除数不能为 0 

取余也同理    %  的除数也不能为 0

   (注意 : %N 运算的结果的范围是【0 ~ N - 1】

        运算结果的符号则取决于左操作数,即被除数是正数,结果为正,被除数是负数,结果为负)

    怎么产生随机数字?
    
    工具 --- c语言相关函数库提供的函数(function- 功能)
    
    random();
    long int random(void);  函数原型
    功能:
      调用一次,返回一个随机数
      
------------伪随机

    srandom(unsigned int seed );
    功能:
     给random 函数提供种子值,random函数会根据种子值的变化产生新的随机数
     
     提供一个时间值:
     time_t time(time_t *tloc);
     该函数返回的是一个时间的秒数                        --使用时需要头文件#include<time.h>
     
     eg; time_t time = (NULL);
     
    
    强制类型转换:
      可以强制转换某些数据的类型
      
      (类型)运算数  // 将运算数对应的类型 强行转成()中的类型
      
      a++  and   ++a
      先加后用和先用后加都是只有参与到别的运算中才发挥作用
      单独使用时,前置和后置效果一样
      运算时必须是个左值
      
      lvalue   // left value --- 左值
      
      左值:
       int a;
       a = 10; //能放在  =  左边的值,叫做左值  --- 变量
      右值:
        只能放在等号右边
        
    
    constant // 常量
      const int a ; // 此时 这个a是一个常量   
      
    lvalue (locationable value) // 可定位的 ---- 可以获取到它的地址
    
    &a // & 表示取地址  -- 获取a对应的内存单元的编号(地址)
    
    现在的左值和右值:
    能被定位到的左值 ------------变量
    不能被定位到的右值 -----------常量 以及 表达式
    
    
    运算符优先级和结合性:
    1、优先级
     一定是先结合的
     eg:
     i++-3 => (i++)-3     -------> 1 - 3 = -2
     
     优先级使用,是在不同级别的运算符混合运算时使用
     
     2、结合性
       同一优先级
        1+2-3
        
    注:
    不写   printf(“%d,%d\n”,i ,i++ ); 这样的代码  因为他的顺序不确定 没有规定

    eg:    
   i+++++i         //贪心原则:
                     从左到右逐个字符扫描,看字符对应的运算符尽可能多的结合成c的运算符
   上式如下分解开  这个程序会报错 因为++ 在使用的时候对象必须是一个左值,在这里的 i++却是一个右值,所以程序运行失败
  【 (i ++ )++ 】 + i  


  
  ++i 比 i++ 效率更高 因为不用产生临时的空间存储
  
 ------------------------------------------------------------------------------------------
 赋值运算符:
 
 =  
 eg:
   int a;
   a = 10 ; //赋值运算
   
   int a = 10 ; //这个一般不当作赋值运算,只当作初始化
   
   不同精度类型之间的混合数值赋值时
    
   长类型=>短类型  此时高位截段  ---->只取字节范围内的后几位数据,将高位的数据全部截断
  
   短类型=>长类型  此时  有符号的短类型------>符号位扩展
                         无符号的短类型------>不进行补充
  
  //高精度和低精度
  float f = 1.23 ;
  int a = f ;
  
  浮点数给到整型里,会产生精度丢失现象
  
  都算是赋值运算:
  +=  // a += 1 <=>  a = a + 1
  -= 
  *= 
  /= 
  %=    
  a+=1  //a = (a + 1)
  
  -----------------------------------------------------------------------------------
  逗号运算:
     ,   
     连接多个表达式
     
     表达式1,表达式2,。。。。。。,表达式n
        这个整体是逗号表达式

        顺序求值   ,整个表达式的结果是最后一个表达式的结果
        
  eg:int a = 1;
      int b = 2;
      c = (a++,a + b)
 
 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值