1.交换两个int变量的值,没有第三个变量,即a=3,b=5,交换后a=5,        b=3;

a=a^b              ^按位异或  相同为0,相异为1

b=a^b              

a=a^b


2.有一个数组中,只有一个数字出现一遍,其余的都出现两遍,找出那个单独的数字  

0和任何数字异或都为本身,相同的数异或为0    异或是满足交换律的

c自学day07_操作符


关于算数右移和逻辑右移的区别

算术右移是右边丢弃,左边补上符号位

逻辑右移是右边丢弃,左边补0

算数左移是左边丢弃,右边补0(就是原数字乘2)

移位操作符不要移动负数位


按位与​ (&) 和​按位或​ ( | )

简单理解为  与为乘(有0即为0)  或为加(有1就为1)


1.编写一个 求整数存储在内存中的二进制中1的个数

如果num&1==1(最后一位一定为1)

c自学day07_整型_02





if的非真与真

c自学day07_操作符_03

c自学day07_整型_04


解引用

c自学day07_整型_05



sizeof类型计算

c自学day07_操作数_06


c自学day07_操作符_07



按位与和按位或的使用

c自学day07_整型_08




c自学day07_操作数_09



c自学day07_操作数_10


a为1时

c自学day07_操作数_11



c自学day07_操作数_12


或的关系左边为真右边不算 与的关系左边为假右边不算

    


c自学day07_操作符_13



c自学day07_操作数_14


c自学day07_操作数_15


隐式类型转换

c的整型运算总是至少以缺省整型类型的精度来进行的

为了提高精度 表达式中的 字符 和 短整型 操作数在使用之前被转换为普通整型,这种转换被称为​整型提升


整型提升是按照变量的数据类型的符号位来提升的

a和b赋值是将整型3和127给了字符型char,故需截断

然后c=a+b  c是char类型 c为10000010

打印时为%d的形式,打印的为整型  故要整型提升

c整型提升补1的原因是 最高位为1(char是有符号的,无符号的补0)

c自学day07_操作符_16


c自学day07_操作符_17


c自学day07_操作数_18


算数转换

long double--double--float--unsigned long int--long int--unsigned int--

int

在后面的操作数要转换成同等级的操作数才能进行运算 不然会有精度丢失等问题


操作符的优先级。