前言一、移位操作符二、按位操作符三、赋值操作符四.单目操作符五、关系操作符六、逻辑操作符七、条件操作符(三目操作符)八、逗号表达式九、下标引用操作符十、函数调用操作符十一、结构成员操作符
前言
提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。
提示:以下是本篇文章正文内容,下面案例可供参考
一、移位操作符<<左移 和 >>右移
操作对象是二进制数
移动方法:(当前一般使用算术右移)
算术右移:右边丢弃左边补原符号位
逻辑右移:右边丢弃左边补零
左移:左边丢弃右边补零
对于移动操作符来说不能用于小数,只能用于整数。
对于二进制有原码,反码,补码三种形式,在电脑内存中是以二进制的补码形式存储
对于正数,原反补相同
对于负数,原码取反为反码,反码+1为补码
对于一个有符号的二进制数,最高位是符号位,正数的最高位为零,负数的最高位为1
操作对象:二进制
&按位与:有一个0则为0;两个为1则为1
如 a=3,b=5
a&b=(0011)&(0101)=0001=1
|按位或:只要有一个1则为1;两个为0才为0
如 a=3,b=5
a|b=(0011)|(0101)=0111=7
^按位异或:相同为0;相异为1
如 a=3,b=5
ab=(0011)(0101)=0110=6
例题:不出创建临时变量将两个整型变量交换 int a int b (1)加减法 a=a+b; b=a-b; a=a-b; (2)异或法 如a=3;//0011 b=5;//0101; a=a^b;//0011^0101=0110=6 b=a^b;//0110^0101=0011=3 a=a^b;0110^0011=0101=5
求一个整数存储在内存中的二进制的个数–>即求二进制补码形式为1的个数
思路:对于正数:如int a=5;//补码:00000000 00000000 00000000 00000101
只需要每一位按位与0即可,只要为1&0=1
对于负数:补码与原码不同,
如int a=-5;补码:11111111 11111111 11111111 11111111 11111010
用按位与同样与0也可以求1的个数
代码:
int main()
{
int a = 5;
int sz = sizeof(a);
int count=0;
int i = 0;
for (i = 0; i < sz;i++)
{
if ((a >> i) & 1 == 1)
count++;
}
printf("%d", count);
return 0;
}
三、赋值操作符
赋值操作符:=
一些特殊赋值(复合赋值):
a+=1;–>a=a+2;
-=
>>=
<<=
*=
%=
/=
&=
|=
^=
都可以写成复合效果
只有一个操作数
!表示假变为真,真变为假
如a=10; !a=0;
a=0; !a=1;(1表示真,所有非0数字都表示真,不过一般用1表示真)
如if(a)表示a为真则执行if语句;
If(!a)表示a为假则执行if语句;
- 表示负值
+ 表示正值
*表示解引用操作符(作用是通过地址找到相对应的对象,一般用于指针里面)
sizeof 表示求……的大小(用来计算变量所占内存空间的大小,单位是字节)
如
int a=4 sizeof(a)=4;
char b=”s” sizeof(b)=1;
int arr[10]={0} sizeof(arr)=40;
char arr[10]={0} sizeof(arr)=10;
~ 按位取反
如int a=0;//补码:00000000 00000000 00000000 00000000
~a–>补码:11111111 111111111 111111111 111111111
反码:11111111 111111111 111111111 111111110
原码:10000000 00000000 00000000 00000001
结果为-1
++和- -
前置:表示先++(- -)再使用
后置:表示先使用再++(- -)
如a=5;
printf("%d",++a);输出6
printf("%d",a++);输出5
间接访问操作符*
五、关系操作符大于:>
大于等于:>=
小于:<
小于等于:<=
不等于:!=
等于:==
逻辑与&& 表示有一个为假则为假
逻辑或|| 表示有一个为真则为真
格式:exp1?exp2:exp3
意思是表达式1为真则执行表达式2,表达式1为假则执行表达式3
八、逗号表达式如:求a与b中的较大值
a>b?a:b
格式:exp1,exp2,exp3,……,expn
意思是这整个表达式是从左向右依次执行,最后输出的结果是最右边那个表达式(即expn)的结果
九、下标引用操作符如:
int a=1;
int b=2;
int c=(a>b,a=b+10,a,b=a+1);
结果c=13
下标引用操作符:[]
主要用于数组
十、函数调用操作符如 一维数组:arr[10]={0};
定义时:10表示arr一共有10个元素
使用时:arr[0]表示数组的第1个元素
二维数组:arr[10][10]={0};
定义时:第一个10表示arr一共有10个行,第二个10表示arr一共有10列,所以两个10一起表示arr一共有100个元素
使用时:arr[0]表示数组的第1行元素
arr[0][0]表示数组的第一行第一个元素
函数调用操作符:()
十一、结构成员操作符如:int max=get_max();
调用函数的时候()就是函数调用操作符
访问一个结构体成员一般格式:
. 结构体.成员名
-> 结构体指针->成员名
例如`
struct student
{
char name[20];
char sex[20];
char tel[20];
};
int main()
{
struct student s1 = { "张三", "男", "110" };
struct student* p1 = &s1;
printf("%sn", s1.name);
printf("%sn", s1.sex);
printf("%sn", s1.tel);
printf("%sn", p1->name);
printf("%sn", p1->sex);
printf("%sn", p1->tel);
return 0;
}`



