重温了一些c的视频,记录一些笔记
C中的字符串是被双引号“...”括起来的字符序列:”abc”,”123456”
printf( “打印字符串%s\n” , ”abc/123456” );
printf( “%d\n” , 1 + 1 );
数据类型与变量:
整数类型:不带小数点的类型,%d
浮点数类型:带小数点的类型,%f
字符类型:英文字符类型,字符数据是使用单引号括起来的一个字符 ’a’ , ’n’ , ’\n’ (为无回显字符),%c
改变变量所代表的值的操作叫做赋值操作;
= 在程序中为赋值符号;
定义变量之后在通过赋值改变其代表的;
初始化即让创建变量出来的变量有一个初始值;
定义变量的同时给一个值;
四则运算:+ , - , * , / , %(取余运算,结果为余数,浮点数不能取余运算) ,先正负号接着乘除最后加减;
关系运算:< , > , <= , >= , == , != 结果为逻辑值:真(1),假(0) ,大小比较运算>相等比较运算;
逻辑运算:&& , || , ! 逻辑运算参与者为逻辑值:真或假,任何非零值在逻辑运算中均为真,任何零值在逻辑运算中均为假;
逻辑运算的短路法则:
对于&&,从左向右进行,如果有一个操作数为假,则整个表达式为假,第一个为假的操作数之后的其它操作数不再计算;
对于||,从左往右进行,如果有一个操作数为真,则整个表达式为真,第一个为真的操作数之后的其它操作数不再计算;
取非运算,单目运算,只需一个操作数,运算结果为逻辑值,真值取非为假,假值取非为真;
c=!!c; //非0即1
位运算: | , ^ ,& , >> , << , ~ 只能对整数型的操作数进行运算,优先级从低到高;
~ 按位取反,~0101=1010
<< 左移,高位移出,低位补0,0011 << 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) ;
原文:https://www.cnblogs.com/ren-hang/p/12644032.html