c笔记小结


重温了一些c的视频,记录一些笔记


C中的字符串是被双引号...”括起来的字符序列:”abc””123456”

printf( “打印字符串%s\n” , ”abc/123456” );

printf( “%d\n” , 1 + 1 );

数据类型与变量:

整数类型:不带小数点的类型,%d

浮点数类型:带小数点的类型,%f

字符类型:英文字符类型,字符数据是使用单引号括起来的一个字符 ’a’ , ’n’ , ’\n’ (为无回显字符),%c

改变变量所代表的值的操作叫做赋值操作;

  =  在程序中为赋值符号;

定义变量之后在通过赋值改变其代表的;

初始化即让创建变量出来的变量有一个初始值;

定义变量的同时给一个值;


四则运算:+ , - , * , / , %(取余运算,结果为余数,浮点数不能取余运算) ,先正负号接着乘除后加减;

关系运算:< , > , <= , >= , == , != 结果为逻辑值:真(1),假(0) ,大小比较运算>相等比较运算;

逻辑运算:&& , || , ! 逻辑运算参与者为逻辑值:真或假,任何非零值在逻辑运算中均为真,任何零值在逻辑运算中均为假;

逻辑运算的短路法则:

对于&&,从左向右进行,如果有一个操作数为假,则整个表达式为假,第一个为假的操作数之后的其它操作数不再计算;

对于||,从左往右进行,如果有一个操作数为真,则整个表达式为真,第一个为真的操作数之后的其它操作数不再计算;

取非运算,单目运算,只需一个操作数,运算结果为逻辑值,真值取非为假,假值取非为真;

c=!!c;  //01

位运算: | , ^ ,& , >> , << , ~ 只能对整数型的操作数进行运算,优先级从低到高;

~  按位取反,~0101=1010

<< 左移,高位移出,低位补00011 << 1 = 0110

>> 右移,低位移除,高位补符号位,0101 >> 2 = 0001

&  按位与,0011 & 1111 = 0011,某一位和0与,其余和1与,相当于按位置零

^  按位异或,同为0,不同为1,不进位加法,0011 ^ 1111 = 1100,某一位和1异或相当于取反

|  按位或,0011|1111 = 1111,某一位和1按位或,相当于置1,

优先级四则运算 > 关系运算 > 赋值运算( =

同一个表达式中应避免不同的运算类型(四则运算,关系运算)

正数用原码表示,负数用补码表示

位运算时先明确:

1操作数的类型,占用内存的大小;

2操作数是正数还是负数;

3不同类型的操作数要先自动对齐再进行位运算;(补符号位)


左值和右值,

左值:可以出现在赋值符号左边的值,如变量

右值:出现在赋值符号右边的值,如变量,字面量,计算结果(a+b),任意表达式

连续变量定义和连续赋值

Int a , b , c ;  a = b = c ;   →   b = c ; a = b ;

三目运算符(条件运算符)

( 条件 )  ?  ( 为真时语句 )  :  ( 为假时语句 )

 (b<10) ? (a = 10) : (a = 100);三目运算符产生的是一个值,不能作为左值使用;

逗号表达式,可以将多个语句连接为一个语句,从左往右执行语句,逗号表达式的值是最右边语句的值;c = ( a=2 , b=3 , a+b );  →  c = 5;

自增自减运算符 ++  - -

前置:先自增自减,再取值

++v  →  (v=v+1 , v)

 --v  →  (v=v-1  , v)

后置:先取值,再自增自减

v++  →  (v=v+1 , v-1)

v--   →  (v=v-1 , v+1)

自增自减操作符的结合方向:自右向左,int c= 1; a = -c++ ;  a = -1 ; c=2 ;

自增自减不支持浮点类型

char 一字节;short 两字节;int 四字节;

正数的最高位为0,负数的最高位为1;

正数的补码为正数本身,负数的补码为负数绝对值取反加1;

无符号数默认为正数,无符号数没有符号位:unsigned

有符号-10和无符号5数相加时大于0,因为有符号的被转换为了无符号的;

▲for循环中自减的变量i不能设置为无符号数,否则会无限循环


类型的转换

char->short->int->unsigned int->long->unsigned long->float->double

for循环先进行判断在进入循环体,适用于循环次数固定的场合

while循环先进性判断再进入循环体,使用于循环次数不固定的场合

do... while 循环先执行循环体再进行条件判断,循环至少执行一次循环体

while ( (scanf ( “ %d , %d ”, &a , &b )) == 2 ) { scanf返回成功读数据的个数,如果不是两个正数就会导致循环终止}

scanf ( “ %*s” ) ; 跳至下一个空白字符,对返回的非所需要的在缓冲区的错误数值进行处理;

%p是输出地址的转换说明:printf ( “%p” , p) ;

猜你喜欢

转载自www.cnblogs.com/ren-hang/p/12644032.html
今日推荐