区分'\0',0,'0'
'\0':\0本身为一个转义字符,在ASCII表中有对应的值,这个值为0.
0:数字0,在计算机中表示0,也可以作为字符串结束标志
int main() {
int a = 0;
char arr[] = { 'a','b','c',0};
printf("%s\\n", arr);
return 0;
}
打印结果为:abc
‘0’:字符0
单目操作符
sizeof操作数的类型长度(以字节为单位):
int a = 10;
int arr[] = {1,2,3,4,5};
printf(%d\\n",sizeof(a)); //4
printf("%d\\n", sizeof(int)); //4
printf("%d\\n",sizeof(arr)); //计算数组大小,单位是字节
printf("%d\\n", sizeof(arr)/sizeof(arr[0])); //计算数组中元素个数
~取反操作符(二进制):
int a = 0;
int b = ~a;
printf("%d\\n", b); //打印结果为-1
在二进制中a的表达为:0000 0000 0000 0000 0000 0000 0000 0000
对a取反,b的二进制表达为(补码):1111 1111 1111 1111 1111 1111 1111 1111
b的反码:1111 1111 1111 1111 1111 1111 1111 1110
b的原码:1000 0000 0000 0000 0000 0000 0000 0001
我们打印负数时打印他的原码:b的原码为-1
原码、反码、补码
数字在内存中存储的时候,存储的是二进制的补码。但打印时打印的是数字的原码
正数的原码、反码、补码都是其本身
有符号的整型:最高位表示符号位,0表示整数,1表示负数
如何计算反码和补码?
++/- - :
int a = 10;
int d = 10;
int b = a++; //后置++,先把a的值赋给b(b的值现在为10),a再加一(a的值现在为11)
int c = ++d; //前置++,先把d加一(d的值11),再把d的值赋给c(c的值为11)
(类型)强制类型转换:
int a = (int)3.14; //打印结果为3
逻辑操作符
&&逻辑与:
//真--非0
//假--0
int a = 3;
int b = 5;
int c = a&&b; //c为真,值为1
int d = 0;
int e = d&&a; //e为假,值为0
| |逻辑或:
int a = 0;
int b = 3;
int c = a||b; //c为真,值为1
int d = 0;
int e = a||d; //c为假,值为0
条件操作符(三目操作符)
exp1 ? exp2:exp3;
若exp1为真,则执行exp2,exp2为整个表达式的结果;
若exp1为假,则执行exp3,exp3为整个表达式的结果