今天我们来了解一下六个较为常见的单目操作符。分别是! - sizeof ~ ++ 以及强制类型转换。
1、首先我们先来了解一下!的用法。我们知道在C语言中,0表示假,而其他非0的都表示真。而!的用法就是“非”,把真的转为假,假的转为真。举个简单的例子:
#include<stdio.h>
int main()
{
int a=10;
printf("%d",a);
printf("%d",!a);
return 0;
}
2、负号-,这个也不需多言,就是数学中的负号,把正数转为负数,负数转为正数。
3、sizeof输出类型长度操作符
我们知道int整型是4个字节长度,double是8个字节长度。比如
int a=10;
printf("%d",sizeof(int));//或者printf("%d",sizeof(a));
打印结果是4,输出类型长度的操作符。
4、波浪号~按位取反(二进制)
波浪号的意思是把一个数的二进制数的每一位都取反,也就是反码。但在C语言中的反码和我们在数字逻辑中计算的会有所不同。接下来我会详细介绍。我们先由一个例子来引入:
#include<stdio.h>
int main(){
int a=0;
int b=~a;
printf("%d",b);
return 0;
}
此时的输出结果是什么?
相信大多数人是这样想的。a是0,所以a的二进制也是0,而b是a的按位取反,所以输出1.
但这个结果是错误的。正确的答案是-1.
为什么?
首先我们刚刚说到了int在空间中占4个字节,也就是占4个地址,换算成bit就是32位的比特位。也就是说0的二进制数列其实是32个0,而把32个0按位取反之后变成了32个1,这样为什么结果不是二的三十二次方减一呢,因为32个1是一个负数的补码,要转回原码表示,先减一然后除了符号位都按位取反,得出结果是1(30个0)1,也就是-1.
5、++,--加一/减一单目操作符
举个例子:
#include<stdio.h>
int main(){
int a=10;
int b=a++;
printf("%d %d",a,b);
return 0;
}
输出的结果是11 10.因为后置++是先赋值后+1,前置则反之。--同理。
6、强制类型转换
我们知道int是整型变量,如果我们打出int a=3.14;这样的代码,显然会报错。那么怎么样才能纠正?int a=(int)3.14则成立,意思就是先把3.14这个浮点数强制类型转换成int类型,也就是先把3.14变成3,再赋值给a。
标签:int,32,3.14,取反,单目,操作符,printf From: https://blog.51cto.com/u_16352468/8318119