0
点赞
收藏
分享

微信扫一扫

2022_2_21初识C语言第五天 _操作符(太多操作符了emmmmm头皮发麻中...)

林塬 2022-02-21 阅读 40


操作符


·算术操作符

+  -  *  /  %


%(取模):


int main()

{

int a = 5%2;//%取模-5/2得到余数

printf("%d\n", a);

return 0;

//输出余数1

}// 补充如果是5/2会输出2


·移位(二进制)操作符


//<<左移操作符

//>>右移操作符


int main()

{

int a = 1;

//整型1占了4个字节=32bit位

//0000000000 0000000000 0000000000 01(1的二进制表示为01)

int b = a << 1;//

//b = a+1;//a+1的结果赋给了b(a没有发生改变)

printf("%d\n", b);//输出2

printf("%d\n", a);//测试a是否有变化,在对a进行左移或右移操作时a始终不变(除非移动结束后赋给a本身会发生改变)

return 0;

}



·位(二进制位)操作符


C语音中:二进制0代表假,1代表真

分类:

·& 按位与

·| 按位或

· ^ 按位异或


//按位与案例:


int main()

{

int a = 3;//写出a=3的二进制位011

int b = 5;//写出b=5的二进制位101

//例:进制转换(二进制:1 1 1 1 )

// 1*2^3 1*2^2 1*2^1 1*2^0

int c = a & b;//按二进制的位进行与(与就是并且的意思)

//按位与并且关系下011

// 101

//得出结果 001(只有在同时为真时会产生真)

printf("%d\n", c);

return 0;

}//按位与后产生结果为001换算成十进制整型结果为1




//按位或案例:


int main()

{

int a = 3;//写出a=3的二进制位011

int b = 5;//写出b=5的二进制位101

int c = a | b;//按二进制的位进行或(或就是或者的意思)

//按位或或者关系下011

// 101

//得出结果 111(只要有一个为真即可)

printf("%d\n", c);

return 0;

}//按位或后产生结果为111换算成十进制整型结果为7




//按位异或案例:


//注意:在C语音中^符号不是次方而是 异或 的意思!

//异或的计算规律:

//对应的二进制位相同则为0(假)

//对应的二进制位相异则为1(真)


int main()

{

int a = 3;

int b = 5;

int c = a ^ b;//按二进制的位进行异或(上方有详细解释)

//按位异或关系下011

// 101

//得出结果 110(相同为真,相异为假)

printf("%d\n", c);

return 0;

}//按位异或后产生结果为110换算成十进制整型结果为6




·赋值操作符

=    +=    -=    *=    /=    &=     ^=    |=     >>=    <<=

以上为复合赋值符


int main()

{

int a = 10;//=是赋值的意思(==是判断相等的意思)

a = a + 10;//第一种写法:a+10后赋值给a

a += 10;//第二种写法:给a自己加上10

a = a - 20;//第一种写法:a-20后赋值给a

a -= 20;//第二种写法:给a自己减去20

a = a & 2;//第一种写法:a按位与2后赋值给a

a &= 2;//第二种写法:给a自己安慰与2

return 0;

}


·单目操作符

-双目操作符

-三目操作符

!           逻辑反操作

-           负值

+           正值

&           取地址

sizeof      操作数的类型长度(以字节为单位)

~           对一个数的二进制按位取反

--          前置、后置--

++          前置、后置++

*           间接访问操作符(解引用操作符)

(类型)       强制类型转换


int main()

{

int a = 10;

int b = 20;

a + b;//+是一个双目操作符(他有两个需要操作的数)同理可推导出单目操作符和三目操作符的意义

return 0;

}



!-逻辑反操作


int main()

{

//C语言中我们表示真假

//0-假

//非0-真

int a = 10;

printf("%d\n", a);//正常输出为10

printf("%d\n", !a);//a为10是真,!a是逻辑反操作符,操作后输出为假-0



//特殊情况

int a = 0;

printf("%d\n", a);//正常输出为10

printf("%d\n", !a);//a为0是假,!a是逻辑反操作符,操作后输出为固定值1

return 0;

}




- 负值


int main()

{

int a = -2;//-为单目操作符

int b = -a;//对a进行取负

int c = +3;//通常情况下+没有价值会省略

return 0;

}




sizeof 操作数的类型长度(以字节为单位)



//sizeof 计算变量大小:


int main()

{

int a = 10;

//sizeof计算的是变量/或者类型所占空间的大小,单位是字节

printf("%d\n", sizeof(a));//4个字节

printf("%d\n", sizeof(int));//4个字节

printf("%d\n", sizeof a);//4个字节(求变量大小时可以省略括号)

//printf("%d\n", sizeof int);//4个字节 (无法省略括号)

return 0;

}


//sizeof 计算数组大小:


int main()

{

int arr[10] = {0};//10个整型元素的数组

//sizeof(int)为4个字节所以可得:10*sizeof(int)=40

int sz = 0;

printf("%d\n", sizeof (arr));//计算arr数组的大小,占用40个字节

//计算一下数组的元素个数

//个数=数组总大小/每个元素的大小

sz = sizeof(arr) / sizeof(arr[0]);

printf("sz=%d\n", sz);

return 0;

}



~ 对一个数的二进制按位取反

//举例: 0101

//按位去取反后对应1010



int main()

{

int a = 0;//整型a占用4个字节,32bit位

//0000000 0000000 0000000 0000000

int b = ~a;//b是有符号的整型

//按位取反对应11111111 11111111 11111111 11111111

//原码、反码、补码

//原码->反码->补码 的过程为:

//原码到反码符号位不变,其他位按位取反得到反码,反码加1得到补码(可反推)

//例:11111111 11111111 11111111 11111111(补码)

//得:11111111 11111111 11111111 11111110(反码)->1000000 0000000 0000000 0000001(原码)

//负数在内存中存储的时候,存储的是二进制的补码

printf("%d\n",b);//输出的是这个数的原码

return 0;

}



--前置、后置--

++前置、后置++


int main()//后置++

{

int a = 10;

int b = a++;//后置++,先使用,再++

printf("a=%d b=%d\n", a, b);//输出:a=11,b=10

return 0;

}


int main()//前置++

{

int a = 10;

int b = ++a;//前置++,先++,再使用

printf("a=%d b=%d\n", a, b);//输出:a=11,b=11

return 0;

}



int main()//后置--

{

int a = 10;

int b = a--;//后置--,先使用,再--

printf("a=%d b=%d\n", a, b);//输出:a=9,b=10

return 0;

}


int main()//前置--

{

int a = 10;

int b = --a;//前置--,先--,再使用

printf("a=%d b=%d\n", a, b);//输出:a=9,b=9

return 0;

}


(类型) 强制类型转换:

int main()

{

int a = (int)3.14;//double-->int

return 0;

}

不建议强制类型转换!



·关系操作符


>

>=

<

<=

!=   用于测试“不相等”

==      用于测试“相等”(=是赋值操作符)


·逻辑操作符


&&     逻辑与(并且)

int main()//&&逻辑与
{
int a = 3;//a非0为真
int b = 5;//b非0为真
int c = a && b;//&&并且关系
printf("c=%d\n", c);//c为真,输出1
return 0;
}

int main()//&&逻辑与

{

int a = 0;//a为0为假

int b = 5;//b非0为真

int c = a && b;//&&并且关系

printf("c=%d\n", c);//c为假,输出0(只要有一个为假,即输出假0)

return 0;

}


||          逻辑或(只要一个成功即为真)

int main()//||逻辑或

{

int a = 0;//a为0为假

int b = 5;//b非0为真

int c = a || b;//||只要有一个为真,即c为真

printf("c=%d\n", c);//c为真,输出1

return 0;

}


int main()//||逻辑或

{

int a = 0;//a为0为假

int b = 0;//b为0为假

int c = a || b;//||只要有一个为真,即c为真

printf("c=%d\n", c);//c为假,输出0

return 0;

}



int main()//||逻辑或

{

int a = 3;//a为3为真

int b = 5;//b为5为真

int c = a || b;//||只要有一个为真,即c为真

printf("c=%d\n", c);//c为真,输出1

return 0;

}



·条件操作符

exp1 exp2 : exp3(三目操作符)

int main()
{
int a = 10;
int b = 20;
int max = 0;

max = (a > b ? a : b);//条件操作符
//a>b 为真则输出a的值,a>b为假则输出b的值
//a=10,b=20,a比b小所以输出b的值为20
if (a > b)
max = a;
else
max = b;
return 0;
}


·逗号表达式

exp1exp2exp3…expN



·下标引用、函数调用和结构成员

[] () . ->


举报

相关推荐

0 条评论