移位的优先级_可复性前移位可以完全复位吗

移位的优先级_可复性前移位可以完全复位吗C语言逻辑操作符和(移)位操作符详解及运算符优先级目录一.操作符分类二.逻辑操作符三:位操作符(重点+难点)1.按位与:2.按位或  |3.异或  ^4.取反  ~笔试题:不能创建临时变量(

C语言逻辑操作符和(移)位操作符详解及运算符优先级   目录   一.操作符分类   二.逻辑操作符   三:位操作符(重点+难点)   1.按位与:   2.按位或  |   3.异或  ^   4.取反  ~   笔试题:不能创建临时变量(第三个变量),实现两个数的交换。   四:移位操作符   1.左移操作符<<   2.右移操作符   五:运算符优先级   1.优先级   2.结合性   3.运算符优先级表   在讲解操作符之前需要了解进制转换和原码、补码、反码的知识。   一.操作符分类   在C语言中,操作符可以分为以下几类:   算术操作符:用于执行基本的数学运算,如加(+)、减(-)、乘(*)、除(/)、求模(%)   关系操作符:用于比较两个值,如等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)。   逻辑操作符:用于连接布尔型表达式,如逻辑与(&&)、逻辑或(||)、逻辑非(!)。   位操作符:用于处理二进制位,如位与(&)、位或(|)、位异或(^)、位取反(~)、左移(<<)、右移(>>)。   赋值操作符:用于将表达式的值赋给变量,如简单赋值(=)、复合赋值(+=,-=,*=,/=,%=,&=,|=,^=,>>=,<<=)。   条件操作符(三操作符):用于执行条件表达式,如条件 ? 表达式1 : 表达式2。   逗号操作符:用于将多个表达式连接成一个表达式,逗号分隔的表达式从左到右依次计算。   指针操作符:用于取内容(*)和取地址(&)。   求字节数操作符:sizeof。   类型转换操作符:用于显式类型转换(typecast)。   增量操作符:用于递增(++)或递减(–),可以放在变量前也可以放在变量后。   由于其中大多数操作符过于简单,本章不再介绍,本章主要讲解其中比较难的逻辑操作符和(移)位操作符。   二.逻辑操作符   逻辑运算符是来连接表达式并且判断该语句的“真假”。   1.  &&:它是“与”运算符,表示两个语句都为真时返回‘1’。   2、||:它是“或”运算符,表示两个语句一个为真时就返回‘1’.   3、!:它是“非”运算符,表示该语句为真时返回‘0’,为假时返回‘1’,就是与该语句的真假相反。   这里的‘1’是真的意思,而‘0’是假的意思。   C语言中定义非零的数为真,0为假,系统默认返回‘1’或‘0’。   在这里需要注意逻辑运算符的优先 级,这个很重要:! > && > ||   代码示例:   三:位操作符(重点+难点)   位操作符简而言之就是对二进制位(补码)进行操作的操作符   &     //按位与:两个二进制序列同一位上都为1则为1,否则为0;   |      //按位或:两个二进制序列同一位上有1则为1,否则为0;   ^     //按位异或:两个二进制序列同一位上的数字相同则为0,不同则为1.   ~    //按位取反 :将二进制序列的每个0变成1,每个1变成0.   注意:位操作符的操作数必须为整数 举个例子:   (正数的原码与补码相同)   5的补码:00000000000000000000000000000101   7的补码:00000000000000000000000000000111 1.按位与:   5&7:00000000000000000000000000000101   转换成十进制:5   同时,记住以下几个运算规则   0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1 2.按位或  |   5|7:00000000000000000000000000000111   转换成十进制:7 3.异或  ^   5^7:00000000000000000000000000000010   转换成十进制:2 4.取反  ~   ~7:0   在学习了基本的位操作符之后,我们可以做几道笔试题来巩固知识。 笔试题:不能创建临时变量(第三个变量),实现两个数的交换。   题解:   解释:b=(a^b)^b=a^b^b,由于一个数异或自己等于0,而任何数异或0又等于数本身,因此   b=a^0=a;即b=a;  同时, a=a^(a^b)=a^a^b=0^b=b;   这样我们就利用异或操作符完成了两个数的交换,是不是很有趣呢?   接下来我们来讲解移位操作符。   四:移位操作符   1.左移操作符<<   用来将一个数的各二进制位全部左移若干位,移动的位数由右操作数指定,右操作数必须是非负值,其右边空出的位用0填补,高位左移溢出则舍弃该高位。   移位规则:左边抛弃、右边补0   例如:3<<1   即 0000000000000000000000000000 0011向左移动一位   (舍弃最左边的二进制位,最右边补0),即0000000000000000000000000000 0110 2.右移操作符   在C语言的移位运算中(左移或者右移),一般来说,机器支持两种形式的右移   1.逻辑右移:左边用0填充,右边丢弃 。   2.算术右移:左边用原该值的符号位填充,右边丢弃。 在C语言中,C语言标准并没有明确定义对于有符号数应该使用哪种类型的右移,然而,实际上几乎所有的编译器/机器组合都对有符号数使用算术右移,另外,对于无符号数,右移必须是逻辑的。   例如:3>>1   即 0000000000000000000000000000 0011向右移动一位   (舍弃最右边的二进制位,最左边补原该值的符号位1),即00000000000000000 0011   警告⚠⚠:对于移位运算符,不要移动负数位,这个是标准未定义的。   例如:   五:运算符优先级   1.优先级   优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是 不⼀样的。   例如:   a+b*c;   此时计算机会优先执行*的运算,再执行+的运算。 2.结合性   如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符 是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右 结合(从右到左执行),比如赋值运算符( = )。   例如:a*b/c   计算机会从左到右依次执行表达式的计算。 3.运算符优先级表   最后,我们用一个表把所有的运算符的优先级和结合性列举出来。   
移位的优先级_可复性前移位可以完全复位吗   至此,本章讲解完毕,撒花。

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/22148.html

(0)
上一篇 2024年 9月 15日 上午7:32
下一篇 2024年 9月 15日

相关推荐

关注微信