运算符、分支语句

news/2024/9/27 23:22:02

位操作符:

可以直接操作二进制数位的内容;~是一个单目位操作符,它可以根据一个数字计算另外一个数字,这两个数字所有二进制数位的内容都不同(按位取反),使用的时候这个符号应该写在数字前面

双目位操作符:包括按位与(&),按位或(|)以及按位异或(^),他们都可以把两个数字对应二进制数位的内容做计算。

按位与(&)

可以把两个数字对应数位的内容做计算;只要一个数位的内容是0则与计算以后的结果就是0

	3			0000	0011
&	5			0000	01010000	0001

任何数位内容和0做按位与结果一定是0,任何数位内容和1做按位与结果保持不变,按位与可以用来获得某些数位的内容,按位与还可以把某些数位的内容设置成0.

按位或(|)

可以把两个数字对应数位的内容做或计算;只要一个数为的内容是1则或计算以后结果就是1

		3		0000	0011|   5		0000	01010000	0111

任何数位内容和0做按位或结果保持不变;任何数位内容和1做按位或结果就是1,按位或可以把某些数位的内容设置成1

按位异或(^)

可以把两个数字的对应数位内容做异或计算,如果两个数位内容一样则异或结果是0,否则结果是1

		3		0000	0011^  5		0000	01010000	0110

任何数位内容和0做按位异或保持不变;任何数位内容和1做按位异或一定改变,按位异或可以把某些数位的内容变成相反内容

'a'		97		0110	0001
'A'     65		0100	0001
ch &=32;
ch |=32;
ch ^=32;

移位操作符

可以把一个数字里所有二进制数位的内容统一向左或向右移动n个位置

'>>'表示向右移位

'<<'表示向左移位;

他们都是双目位操作符,操作符左边是将要进行移位操作的数字,操作符右边是将要移动的数位,移位操作本质上就是把每个数位的内容放到另外一个数位里,向左移位的时候右边空出来的数位里必须填充0,无符号类型数字右移的时候左边空出来的数位里填充0;有符号类型数字右移的时候左边空出来的数位里填充符号位的内容(1或0)。一般情况下向左移动n个位置相当于乘以2的n次方,向右移动n个位置相当于除以2的n次方。所有位操作符都不会修改存储区内容。

&也可以作为单目操作符使用,这个时候它可以用来计算一个存储区的地址;使用的时候应该把这个操作符写在一个存储区的前面,可以使用%p占位符把地址数据显示在终端窗口里。我们的计算机里所有地址数据都是由32个二进制数位构成的。

*也可以作为单目操作符使用,这个时候它可以根据一个地址找到对应的存储区,这个操作符应该写在一个地址数据前面。

三目操作符

可以从两套计算规则里选择一套进行计算,三目操作符格式如下:

布尔值 ? 公式1:公式2;如果布尔值为真就采用公式1计算,否则就采用公式2计算。不要再?后使用赋值操作符

练习:男人身高减体重小于105算超重,女人身高减体重小于110算超重;gender(0代表女人,1代表男人),height 身高,weight 体重。使用三目表达式。

gender ? height-weight<105:height-weight<110

练习:编写程序从键盘得到一个0到127之间的整数,把这个整数转换成二进制的结果显示在屏幕上

隐式类型转换

如果表达式里包含多个不同类型的数字就必须首先把他们转换成同一个类型然后在计算,这个转换过程叫隐式类型转换,隐式类型转换完全由计算机完成,隐式类型转换的时候必须把占地小的类型转换成占地大的类型,如果不同类型数字大小不一样就把整数类型转换成单精度浮点类型,把有符号类型转换成无符号类型。

强制类型转换

C语言程序里可以临时给数字指定类型,这叫做强制类型转换,强制类型转换格式如下

(char)300

强制类型转换有可能导致数据内容丢失,类型转换不会修改存储区内容

分支语句

分支语句可以从几组语句中选择一组执行而忽略其他组,如果在编写程序的时候遇到多种可能性,每种可能性需要专门的语句处理就需要使用分支;if关键字可以用来编写分支语句,if分支里需要为每种可能性编写专门的语句进行处理,if分支里需要为每组语句编写配对的逻辑表达式,当某个逻辑表达式结果为真的时候就执行它配对的那一组语句。

if(){}
else if(){}
else if(){}
else if(){}

if分支里的任何两组语句都不可能同时执行(可能同时执行的语句不可以被包含在一个if分支里),编写if分支的时候最好先把所有可能性的个数确定下来,如果分支里必然有一组语句会执行就可以省略最后一组语句的逻辑表达式和if关键字如果if分支里多个逻辑表达式同时为真就执行第一个为真的逻辑表达式所对应的语句而忽略后面的语句,可以利用这一点简化if分支里的逻辑表达式。if分支里的某一组语句不仅仅和他配对的逻辑表达式有关,只有当前面的所有的逻辑表达式都为假而配对逻辑表达式为真的时候才会执行这组语句。编写if分支的时候尽量把逻辑表达式简单的写在前面。

练习:编写程序从键盘得到三个数字,找到其中最小的数字并把它显示到屏幕上

switch……case格式也可以用来编写分支,如果一个分支里每个可能性都可以用一个唯一的整数表示,这种分支才可以用switch……case格式实现,

switch () {case 0:break;case 1:break;case 2:break;case 4:break;default:
}

练习答案:

点击查看代码
#if 0
/*** 操作符演示** */
#include<stdio.h>
int main(){char ch=~0x92;int num=ch;printf("num=0x%x\n",num);printf("3&5=%d\n",3&5);printf("3|5=%d\n",3|5);printf("3^5=%d\n",3^5);printf("3<<2=%d\n",3<<2);num=0x80000000;printf("0x80000000>>2=0x%x\n",0x80000000 >> 2);printf("num=0x%x\n",num >> 2);return 0;
}#elif 0
/*** 地址相关操作符演示*** */
#include<stdio.h>
int main(){int num=0;printf("&num=%p\n",&num);*(&num)=10;printf("num=%d\n",num);return 0;
}#elif 0
/*** 三目表达式演示、**/
#include<stdio.h>
int main(){int num=0;printf("请输入一个数字:\n");scanf("%d",&num);num=num >= 0 ? num : 0-num;printf("绝对值是%d\n",num);return 0;
}#elif 0
/** 显示从0到127之间的 整数,显示二进制** */
#include<stdio.h>
int main(){int num=0;unsigned char tmp=0x80;printf("请输入数字0-127:\n");scanf("%d",&num);printf("%d", (num & tmp) != 0);tmp >>= 1;printf("%d", (num & tmp) != 0);tmp >>= 1;printf("%d", (num & tmp) != 0);tmp >>= 1;printf("%d", (num & tmp) != 0);tmp >>= 1;printf(" %d", (num & tmp) != 0);tmp >>= 1;printf("%d", (num & tmp) != 0);tmp >>= 1;printf("%d", (num & tmp) != 0);tmp >>= 1;printf("%d", (num & tmp) != 0);printf("\n");return 0;
}#elif 0
/*** 类型转换演示** */
#include<stdio.h>
int main(){printf("num=%d\n",sizeof(1 ? 1: 0.9));printf("num1=%d\n",-7+3<0);printf("num2=%d\n",-7+3u<0);printf("%d  %d\n",300,(char)300);return 0;
}#elif 0
/***if 分支语句演示** */
#include<stdio.h>
int main(){int num = 0;printf("请输入一个数字:\n");scanf("%d",&num);if(num > 0){printf("非负数\n");}else if(num<0){printf("负数\n");}else if(!num){printf("是0\n");}return 0;
}#elif 0
/*** if分支演示** */
#include<stdio.h>
int main(){int num = 0;printf("请输入一个数字:\n");scanf("%d",&num);if (num < 0) {printf("负数\n");}else if (num >= 0 && (num & 1)) {printf("奇数\n");}else if (num >= 0 && !(num & 1)) {printf("偶数\n");}return 0;
}#elif 1
/*** 寻找最小数字** */
#include<stdio.h>
int main(){int num1=0,num2=0,num3=0;printf("请输入三个数字:\n");scanf("%d%d%d",&num1,&num2,&num3);/*if (num2 > num1 && num3 > num1 ) {printf("最小数字是:%d\n",num1);}else if (num1 > num2 && num3 >num2) {printf("最小数字是:%d\n",num2);}else if (num1 > num3 && num2 > num3) {printf("最小数字是:%d\n",num3);}*/if (num1 > num2) {if (num2 > num3) {printf("最小数字是是%d\n",num3);}else {printf("最小数字是%d\n",num2);}}else{if (num1>num3) {printf("最小数字是%d\n",num3);}else {printf("最小数字是%d\n",num1);}}return 0;
}
#endif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65583.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

征程6 上基于 DEB 工具实现包管理

1.引言 在开发、调测过程中,开发人员需要将系统软件、应用软件部署到 Soc 板端,以用于运行调试。传统的部署方式是通过解压复制或者调用部署脚本。这样的部署方式需要有着方式不统一、维护投入大的缺点。 在 linux 系统上,大多采用包管理的方式管理软件包,常见的包管理方式…

华为云技术专家分享4大举措,助力开发者开启鸿蒙原生应用开发

鸿蒙生态是面向全场景时代的新生态,为开发者带来新价值新机遇。本文分享自华为云开发者联盟公众号《DTSE Tech Talk | 第66期:鸿蒙上云,加速开发者成长。》 本期DTSE Tech Talk直播主题是《鸿蒙上云,加速开发者成长》,华为云HarmonyOS DTSE技术布道师芝诺在本议题中与开发…

动手动脑01

动手动脑01 重新编写java测试00 Planinformation public class PlanInformation { // 变量id为整型,表示日报流水号,依次加一。 // 变量planid 为字符串类型 String,表示产品生产批次号(例如:2312-110,有8 位字符组成,前四位表示年月,后三位表示序号)。 // 变…

黑马PM-内容项目-用户端产品设计

引导页&启动页&闪屏页用户端设计思路注册登录内容发布内容列表&内容详情内容分发个人中心

Stream 流

程序示例: import java.util.ArrayList;public class StreamDemo1 {public static void main(String[] args) {/*创建集合添加元素,完成以下需求:1.把所有以“张”开头的元素存储到新集合中2.把“张”开头的,长度为3的元素再存储到新集合中3.遍历打印最终结果*/ArrayList<…

第一次结对作业102202106王强

第一次结对作业之需求分析和原型设计这个作业属于哪个课程 首页 - 软件工程2024 - 福州大学 - 班级博客 - 博客园这个作业要求在哪里 2024秋软件工程结对作业(第一次之需求分析和原型设计) - 作业 - 软件工程2024 - 班级博客 - 博客园这个作业的目标 结对作业,进行需求分析和…

C++ 容器赋值运算符

▲ 《C++ Primer》 P302

第34章 货币政策和财政政策对总需求的影响

货币政策如何影响总需求 对美国经济来说,总需求曲线向右下方倾斜的最重要原因是利率效应。流动性偏好理论(theory of liquidity preference):凯恩斯提出的理论,认为利率的调整会使货币供给与货币需求达到平衡第一部分 货币供给 货币供给量由美联储的政策所固定,因此它不取…