—————————————————————————————————————————
一、“!” 逻辑操作符
在变量前面加"!",把变量变为假(在C语言中数字0表示假,非0表示真即使是负数),如果变量本身为"0"变为真(非0)
例:
int a = 100;
printf("%d\n",!a);//运行结果为0
—————————————————————————————————————————
二、"~"按位取反
对一个数的二进制按位取反
把该数所有二进制中的数字,“1"变为"0”,“0"变为"1”,包括符号项。
例:
int a = 0;
printf("%d\n",~a);//运行结果为"-1"
整数a = 0
a 二进制 : 00000000 00000000 00000000 00000000 //32位(至于为什么是32为,先记住后面讲)
~a 二进制: 11111111 11111111 11111111 11111111 //32位数字
第一个数字也就是标了橙色的数字就为符号位,"1"为负、 "0"为正
2.1 原、反、补码
一个整数的二进制表示有3种: 原码、反码、补码
整数在内存中存储的是补码
上面~a为啥二进制是: 11111111 11111111 11111111 11111111 却得到数字-1呢
关于-1的原码、反码、补码的计算:
10000000 00000000 00000000 00000001(原码)
11111111 11111111 11111111 11111110 (反码)
11111111 11111111 11111111 11111111 (补码 计算机内存中的存储方式)
原码转反码:符号位不变,其他按位取反
反码转补码:反码+1
换过来也一样的
补码转反码:补码-1
反码转原码:符号位不变,其他按位取反
注意:正数也有原码、反码、补码,但是正数的原码、反码、补码都相同
—————————————————————————————————————————
三、"++"前置加加/后置加加
前置加加,先加后用
后置加加,先用后加
例:
int a = 10;
int b = ++a;//前置加加,先加后用,即b = 11,a = 11
int c = 10;
int d = c++;//后置++,先用后加,即 b = 10,a = 11
—————————————————————————————————————————
四、 "- -"前置减减/后置减减(- -内部没空格)
与"++"同理:
前置--,先减后用
后置--,先用后减
例:
int a = 10;
int b = --a;//前置减减,先减后用,即b = 9,a = 9
int c = 10;
int d = c--//后置--,先用后减,即 b = 10,a = 9
—————————————————————————————————————————
五、(类型)强制类型转换
用途与定义:当要赋的值与定义的类型不一样时,使用强制类型转换,把要赋的值强制转换为与强转类型内的类型相同
例:
int a = 3.99;//把浮点型赋值给整形会有警告
//整形 浮点型
int b = (int)3.99;//把浮点型强制转换为整形后再赋给整形
注意:在使用强制类型转换时候会导致精度丢失,如a = 3.99,但是在强制转换(int)后,存入b中的是3。后面的精度丢失了