1.交换两个int变量的值,没有第三个变量,即a=3,b=5,交换后a=5, b=3;
a=a^b ^按位异或 相同为0,相异为1
b=a^b
a=a^b
2.有一个数组中,只有一个数字出现一遍,其余的都出现两遍,找出那个单独的数字
0和任何数字异或都为本身,相同的数异或为0 异或是满足交换律的
关于算数右移和逻辑右移的区别
算术右移是右边丢弃,左边补上符号位
逻辑右移是右边丢弃,左边补0
算数左移是左边丢弃,右边补0(就是原数字乘2)
移位操作符不要移动负数位
按位与 (&) 和按位或 ( | )
简单理解为 与为乘(有0即为0) 或为加(有1就为1)
1.编写一个 求整数存储在内存中的二进制中1的个数
如果num&1==1(最后一位一定为1)
if的非真与真
解引用
sizeof类型计算
按位与和按位或的使用
a为1时
或的关系左边为真右边不算 与的关系左边为假右边不算
隐式类型转换
c的整型运算总是至少以缺省整型类型的精度来进行的
为了提高精度 表达式中的 字符 和 短整型 操作数在使用之前被转换为普通整型,这种转换被称为整型提升
整型提升是按照变量的数据类型的符号位来提升的
a和b赋值是将整型3和127给了字符型char,故需截断
然后c=a+b c是char类型 c为10000010
打印时为%d的形式,打印的为整型 故要整型提升
c整型提升补1的原因是 最高位为1(char是有符号的,无符号的补0)
算数转换
long double--double--float--unsigned long int--long int--unsigned int--
int
在后面的操作数要转换成同等级的操作数才能进行运算 不然会有精度丢失等问题
操作符的优先级。