操作符(2)
位移操作符:<< ,>> (箭头方向朝那边就是那边的位移操作符)
位移移动的是二进制位。
如
int a=2
int b=a<<1;
printf("%d",b)
打印出来b的结果是4
int a=2的二进制是0000...010(总共32位数) <<1整体表示向左1个单位
则变为000...100(总共32位数)所以b=4
位操作符:& (与) | (或) ^(非)?(并不是很确定)..
赋值符:
形如a=a+5 也可用 a+=5 a=a-5 也以用 a-=5
单目操作符(只有一个操作数的)(1)
如! , - , + ,& , sizeof()也可以写成sizeof。用来计算类型或者变量大小的
sizeof的妙用(用来计算数组大小)
如
int arr[10]={0}
int sz=sizeof(arr)/sizeof(arr[0])
printf("%d",sz)
这样就可以计算数组内一个空间的大小
也可以用来计算数组整体的大小
int arr[100]={0}
int a=sizeof(arr)
上面的大小a为100*4=400
c语言中的真假定义(运用:!a)
c语言中0表示假, 非0数都表示真。(真的默认值为1)
!a的作用就是反条件a 让a的属性相反 如果a原来是真的则变成假的 反之亦然。
int a=10;
printf("%d",!a);
上面的内容打印出来的结果是0。如果a是0,则打印1(统一的)。
具体的使用场景
int a=1;
if(a)
{
}
if(!a)
{
}
a真的时候执行啥功能 ,假的时候执行啥功能。
~(按位取反)---把所有二进制中数字取反0变1,1变0
补充:一个整数二进制的最高位为符号位,1为负。
且数据(整数)在内存中的储存形式为补码。
数据的储存类型有三种;原码,反码,补码。
正整数三码合一 三个码都一样。
对于负数 如-1 。
原码100...01(总共32位数)
反码111...10(总共32位数) 原码->反码(符号位不变,其他0变1,1变0)
补码111...11(总共32位数) 反码->补码 (在最后一位上加1)
具体使用
int a=0;
printf(”%d“,~a);
打印出a=-1
int a=0的二进制
a 000..00(总共32位)
~a 111..11 (总共32位)在内存中计算 所以得到的是补码。但"%d"形式打印出的是真实值的原码,倒推出原码可得a的值。
CRYING OUT LOVE IN THE CENTER OF THE WORLD
在世界中心喊出爱!