05单目操作符
~:按(二进制)位取反
有关带符号整数的二进制的三种表示:原码,反码,补码
int 32个bit
表示-1
原码
10000000000000000000000000000001 (最左边是符号位,0正1负,剩余是数值位,数值为表示真值-1的绝对值)
反码:
负数:在原码基础上数值位0改1,1改0(即按位取反),符号位不变
正数:原码即反码
-1:01111111111111111111111111111110
补码:
负数:反码末尾+1
正数:反码即补码
-1:01111111111111111111111111111111
所以正数:原码=反码=补码
表示0
原码
00000000000000000000000000000000或10000000000000000000000000000000
(+0和-0均可)
#include <stdio.h>
int main()
{
int a = 0;
printf("%d", ~a);
return 0;
}
结果:-1
由于整数在内存中存储的是补码,整数的真实值是由原码得到的
printf打印的是二进制补码转成原码的十进制数字
0:原码00000000000000000000000000000000
反码11111111111111111111111111111111
补码11111111111111111111111111111111 (不变,如果末尾+1会溢出)
++(自增)和--(自减):
使用分为前置和后置
前置 ++a --a
后置 a++ a--
前置++:先++,后使用
int a=3;
int b=2;
b=++a;
先++(就是+1):a的值由3变4,后使用:4赋值给b
同理b=--a;(--就是-1)
#include <stdio.h>
int main()
{
int a = 3;
int b = 2;
b = --a;
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
后置++:先使用,后++
int a=3;
int b=2;
b=a++;
先使用:a的值未变时先赋值给b
后++:a的值+1
同理b=a--
(类型):当类型不匹配时,可强制类型转换
int a=(int)1.21;
把1.21强制转换为整型
(& *在第19篇)
06关系操作符
>大于
>=大于等于
<小于
<=小于等于
!=不等于
==等于(容易写成=)
07逻辑操作符
&& 逻辑与(a与b同时)
与:a与b任意一个为假则为假,a与b全真则为真
#include <stdio.h>
int main()
{
int a = 3;//a非0,见第14篇
int b = 2;//b非0
int c = a && b;//逻辑与判断:a与b均非0,则a与b为真
printf("%d\n", c);//输出1
return 0;
}
||逻辑或(a或b)
或:a与b任意一个真则真,两个都为假则假
#include <stdio.h>
int main()
{
int a = 0;//a假
int b = 0;//b假
int c = a || b;//逻辑与判断:a或b为假
printf("%d\n", c);//输出0
return 0;
}
08条件操作符(三目操作符)
格式:表达式1?表达式2:表达式3即为exp1?exp2:exp3
规则:exp1成立,计算exp2,得出结果;exp1不成立,计算exp3,得出结果;(其实类似if语句)
例:输入两数输出最大值
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d %d", &a, &b);
c= a > b ? a : b;
printf("%d\n", c);
return 0;
}
如果调用数组则简洁:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a[3] = { 0 };
scanf("%d %d", &a[0], &a[1]);
a[2] = a[0] > a[1] ? a[0] : a[1];
printf("%d\n", a[2]);
return 0;
}
09逗号表达式
定义:逗号隔开的一串表达式
exp1,exp2,exp3,……,expn
程序从左向右依次执行exp
整个exp的结果是最后一个exp的结果
int a=0;
int b=0;
int d=(a=a+1,c=c+2,c=c-a);
d为1
10其他操作符:
介绍[ ]
[ ](下标引用操作符)可用于定义数组
介绍()
( )(函数调用操作符)printf();
格式:函数名(内容);
(.和->在第20篇 http://t.csdnimg.cn/px53w)
2.强制类型转换
格式
(类型)
int a = (int)3.14;//a的输出结果是3
float b=4/(double)5;//b的输出结果是0.800000