一、操作符详解
例题如果我要将a的5为改为1那么改如何编程
A=13
13=00000000 00000000 00000000 00001101
或上(按位与=有1出1全0出0)
1<<4=00000000 00000000 00000000 0001 0000
当有一出一时则会让第五位变为1其他的按照13进行。
又因为是2进制1 2 4 8 16所以最后打印的数为11101=29
二、赋值操作符
赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值。也就是你可以自己给自己定一个值。
例如:=、+=、-=、*=、/=、>>=、<<=
A=x=y=1//连续赋值都是y+1的值
复合操作符+=、-=、*=、/=、>>=、<<=
- 单目操作符
!——逻辑取反
-——负值
+——正值
&——取地址
Sizeof——操作数的类型长度(以字节为单位)
~——对一个数的二进制按位取反
--——前置、后置--
++——前置、后置++
*——间接访问操作符
(类型)——强制类型转换
(一)!逻辑取反
当a=5时为真打印hehe、当a等于!A(取反)为假时打印haha。
单目操作符只有一个操作数
(二)、Sizeof
当计算了sizeof时是s说了算,sizeof计算出了s的大小之后这行程序就已经执行完了
(三)、按位取反~
在内存里存的是补码,所以取反是按补码进行取反。
例题1里把13的第五位改为了1,那么现在该怎么改回来呢。
利用取反把原来是
00000000 00000000 00000000 00010000先将1向左位移4位
11111111 11111111 11111111 11101111的值取反位
00000000 00000000 00000000 00001101在与上这个数(有0出0,全1出1)
最后即可改为0
(四)++、--
后置++要注意当运算完之后就会运行++
--也是同样的道理,
A=10
前置=9,10
后置=9,9
- 、取地址、间接访问操作符
- 、强制类型转换
当输入与类型不符的值时,会报出错误。可以使用强制类型转换(int)
(七)、sizeof和数组传参
Printf打印出sizeof计算的数组大小:arr是40(int为4个字节,4*10=40)ch为10(char为1个字节)
然后用test1(arr)传到test1函数,test1里的打印函数打印出多少呢?答案是8
数组传参本质上传的是首元素的地址,他的数组元素都是整型那第一个也当然是整型。
首元素地址放到函数里那应该放在指针变量里也就是说void test1(int arr[])的(int arr[])
应该是(int* arr[])所以打印出来的是4和8
Int为什么是4和8?那char为什么也是4和8?
不要看ch是个char类型是数组,他传过去的依然是首元素地址。即使你传的是个char类型的地址,那也应该是个指针(char* ch),指针变量是用来存放地址的,那ch也是用来存放地址的,大小也应该是个指针变量的大小,也是4或者8个字节。
指针大小不论类型,不管什么类型的指针变量都是用来存放地址的,地址总是32个进制序列或者64个2进制序列。所以地址的大小是固定的,不管什么类型都是这么大
32位是4
64位是8
(八)、关系操作符
>
>=
<
<=
!=
==
关系操作符就是用来比较大小的,比较简单,但是我们要注意一些运算符使用时候的陷阱。
注意:在编程过程中==和=不小心写错,导致的错误。
==是判断 =是赋值
If(什么>=什么)
- 逻辑操作符
&&(并且)
||(或者)
if(什么&&什么)
当两个都为真的时候才会进去
其中一个不为真就直接出去
If(什么||什么)
当两个中有一个满足就会进来
当有一个满足条件了就直接出去
A=0 b=3 c=3 d=4
例题
为什么会是1234?
因为i的a++是先计算再加的,再然后是因为并且有了假之后后面的值就都不要算了。
(十)三目操作符
因为有三个操作数
Exp1?Exp2:exp3
A=1
B=( a > 5 ? 1 : -1 );
解析:a大于5吗?如果大于则b是1如果小于则是-1.
其实差不多是IF else语句
(十一)、逗号表达式
逗号表达式,就是用逗号隔开的多个表达式。逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。
例2:if(a = b + 1,c = a / 2 ,b > 0);
这个代码里决定进不去由d>0说得算,但是d可能会受前面表达式计算的影响。
例3:
- 下标引用、函数调用和结构成员
1.[]下标引用操作符
操作数:一个数组名+一个索引值
访问数组元素时使用
2.()函数调用操作符
接收一个或者多个操作数:第一个操作数是函数名,剩余的操作数就是传递给函数的参数
Int main()
{
Test1();
}
3.访问一个结构的成员
“.” 结构体成员名
->结构体指针,成员名
Struct book
定义一个结构体类型:书
结构体变量名.成员名
用结构体的指针找到成员
结构体指针->成员名