移位操作符只能作用于整数,且操作的是补码,右移分为算术右移和逻辑右移(具体看编译器)
算术右移(vs是这种):右边丢弃,左边补原来的符号位
逻辑右移:右边丢弃,左边补0
左边丢弃,右边补0
权重是0,有0便为0,无0便为1
权重是1,有1便是1,无1便是0
相同为0,相异为1
相信这些大家一看就知道怎么用啦
如果是真加上它就是假,如果是假加上它就是真
非0为真,!非0为假
布尔类型只有两种状态 真和假
布尔类型只占一个类型
一个int 是4个字节,一个char是1个字节
我们常用sizeof来计算数组大小
这里用sizeof(arr)计算出数组内所有字节的多少,再除以首元素的字节大小,就可以算出有多少元素
补充sizeof内部是不进行运算的
这里s依然是5,并没有改变,同时sizeof计算的是s的大小,short类型两个字节
都只能作用于整数,操作补码0变为1,1变为0,注意所有位都要参与
1.例如a++就是a=a+1,同理a–就是a=a-1。
2.注意这里是分为前置和后置的,++a和a++
其实这两种写法最主要的区别就是运算顺序不同,前置运算顺序高,后置运算顺序较低
也就是a先将值3赋给b,再++改变a的值为4
也就是a先++变为4,再将4给b
同样 - -也同理
如果说pa是a的地址,那么 * (pa)就是这个地址里放的内容,其实就是a
其实就是并且的意思,两者都满足才为真
其实就是或者的意思,只要有一个满足就为真
——————以下是一些拓展——————
这是怎么得出来的呢?接下来挨个分析
首先我们进入判断式,从左向右看,第一个是a++,这是一个后置++,所以先使用再赋值,也就是刚进入判断式时a=0,那么计算机就知道这个判断式肯定为假,那么计算机就不会往后计算,直接跳到下一步(printf),这时b和c都不会改变,而a在使用完后++变为1,同时i就得到返回值0(为假就返回0)
还是一样,首先进入判断式,第一个a=0,那么此时计算机还不能判断这个判断式的真假,所以向右计算,b=1,好了这下计算机知道这个判断式肯定为真,所以不再向下计算,所以c的值不会改变,同时b,c分别++变为1和2,i得到返回值1(非0表示真,但我们规定如果为真计算机就返回1)
如果a表达式为真,那么就进入b,否则进入c
以上式子完全等价于以下的
逗号表达式是从左至右计算,但最终的值是最后一个
分析:首先进入a>b,这是个无效式子并未得出什么结果。接着进入a=b+10,计算得a=12。然后进入a,也是无效。最后进入b=a+1,得出b=13,并把值赋给c,最终打印出来
这个较为复杂,我将它放在了另一篇博客中 整形提升