1.整型的原反补码
整数在内存中存的是补码,
三种码相互转换,最前面的符号位不变
2.移位操作符
右移分两种,左移只有一种
移位操作符就是对整数的原反补码进行操作,得到新结果。
算数右移:空位补原符号位(正补0负补1)
(负数操作时,先变成补码再操作)
3.位操作符&(与:两个都是一返回1) |(或:有一个是1返回1) ^(异或:两个不一样返回1)
写出补码按照各自的规则得到一个新数字,写出来就行了
例:实现变量值的交换 (设置第三个变量;加减运算得到结果;用位操作符)
异或的结论:0^a=a; a^a=0; 支持交换律; 不会有溢出的风险
按位或用于更改一个整数的二进制表达
0000000000000000000000000001101
0000000000000000000000000000010
得到
0000000000000000000000000001111
4.复合操作符
+= *= >>=
5.单目操作符(只有一个操作对象,& !sizeof ~ * ++ --)
&取地址用%p接受,取得是变量的第一个字节的地址
int* p=&a;p里面是a的地址,*p是a内部的值
(类型) 强制类型转换
++ --
*和指针变量配合使用,找到原变量
sizeof与数组:
//sizeof (arr) ->arr表示整个数组
//fun (arr)
{
sizeof (arr) ->arr指的是首元素指针
}
关于数组:只有sizeof后面的数组名指的是整个数组,其他的都是首元素地址,是指针,4个字节
6.逻辑操作符 && || 注意与 & |等按位操作符区分开
这里的a是0,为假,&&后面的也不用计算了
这里的a是1为真,||后面的不用计算了
(同理,如果第一句为假,第二句为真,第三句也就不用计算了)
精辟!
7.三目操作符
exp1 ? exp2 : exp3
1为真,则执行2,1为假则执行3
8.逗号操作符
exp1,exp2,exp3,exp4,exp5,.........expn;
从左到右,一个一个执行,但是整个表达式的结果是最后一个式子的结果
8.其他
下标:[]
arr[1] 和1[arr]一样的
[]是一个操作符,负责检测两个东西,意义是*(arr+1)