首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

运算符、分支语句

编程知识
2024年09月27日 22:18

位操作符:

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

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

按位与(&)

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

	3			0000	0011
&	5			0000	0101
				0000	0001

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

按位或(|)

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

		3		0000	0011
    |   5		0000	0101
            	0000	0111

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

按位异或(^)

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

		3		0000	0011
     ^  5		0000	0101
            	0000	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

From:https://www.cnblogs.com/GQH1000/p/18436772
本文地址: http://www.shuzixingkong.net/article/2366
0评论
提交 加载更多评论
其他文章 一次实践:给自己的手机摄像头进行相机标定
目录1. 问题引入2. 准备工作2.1 标定场2.2 相机拍摄3. 基本原理3.1 成像原理3.2 畸变校正4. 标定解算4.1 代码实现4.2 详细解析4.2.1 解算实现4.2.2 提取点位4.3 解算结果5. 问题补充 1. 问题引入 不得不说,现在的计算机视觉技术已经发展到足够成熟的阶段了,
一次实践:给自己的手机摄像头进行相机标定 一次实践:给自己的手机摄像头进行相机标定 一次实践:给自己的手机摄像头进行相机标定
博客园商业化道路建议
根据园子目前的行动,基本可以总结出: 1.园子不希望加大广告投放面积和强度,保持园子的纯洁性。 2.园子不希望走文章推广以及付费道路,做好技术社区。 3.园子不希望牺牲普通用户权益,保障公众使用体验。 基于园子的救园方案,可以看出:园子希望通过用户主动开通 vip 来获取收入,但是又因不想剥夺普通用
Java中浮点数运算存在的精度问题以及解决方法
观察以下一段代码,相信小朋友都可以一眼看出答案,但是计算机给出的答案是这样吗? public class TestDouble { public static void main(String args[]) { System.out.println(&quot;0.05 + 0.01 = &quo
Java中浮点数运算存在的精度问题以及解决方法 Java中浮点数运算存在的精度问题以及解决方法
SD卡的基本知识与选购指南
1、SD卡与TF卡 SD 卡:又叫标准 SD 卡,其尺寸大小为 32 x 24 x 2.1 mm ,一般用于数码相机、声卡和采集卡等设备。 TF 卡:又叫 micro SD 卡,其尺寸大小为 15 x 11 x 1 mm ,一般用于手机、游戏机、无人机和行车记录仪等设备;因为其尺寸更小巧,且还可以通
SD卡的基本知识与选购指南 SD卡的基本知识与选购指南 SD卡的基本知识与选购指南
手搓大模型Task03:手搓一个最小的 Agent 系统
前言 训练一个大模型是一件高投入低回报的事情,况且训练的事情是由大的巨头公司来做的事情;通常我们是在已有的大模型基础之上做微调或Agent等;大模型的能力是毋庸置疑的,但大模型在一些实时的问题上,或是某些专有领域的问题上,可能会显得有些力不从心。因此,我们需要一些工具来为大模型赋能,给大模型一个抓手
手搓大模型Task03:手搓一个最小的 Agent 系统 手搓大模型Task03:手搓一个最小的 Agent 系统
全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码
在 Python 中,字符串是文本的表示,默认使用 Unicode 编码,这允许你处理各种字符集,字符编码是将字符转换为字节的规则,常见的编码包括UTF-8、UTF-16和ASCII。
全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码 全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码 全网最适合入门的面向对象编程教程:53 Python 字符串与序列化-字符串与字符编码
WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧
802.11 无线 WiFi 有 数据帧,管理帧、控制帧 三种类型帧。这些帧由 9 个部分组成:Frame Control,Duration ID,Address1,Address2,Address3,Seq-ctl,Address4,Frame Body,FCS。需要注意的是,有些组成部分在有些帧
WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧 WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧 WiFi基础(五):802.11帧结构与WiFi控制帧、管理帧、数据帧
2款.NET开源且免费的Git可视化管理工具
Git是什么? Git是一种分布式版本控制系统,它可以记录文件的修改历史和版本变化,并可以支持多人协同开发。Git最初是由Linux开发者Linus Torvalds创建的,它具有高效、灵活、稳定等优点,如今已成为软件开发领域中最流行的版本控制系统之一。Git使用一种名为“仓库”的数据结构来保存代码
2款.NET开源且免费的Git可视化管理工具 2款.NET开源且免费的Git可视化管理工具 2款.NET开源且免费的Git可视化管理工具