C语言入门---位操作

news2024/11/27 22:25:38

目录

1. 两个数不同的二进制位个数

 2.原码、反码、补码

3.不创建临时变量实现两个数的交换

4.求一个整数存储在内存中的二进制中1的个数

5. 特例-1

6.将指定的位置置1

 7.将指定位置置1

8.++a与a++

9.||与&&

10.逗号表达式

11.srand与rand

12.sizeof

 13.结构体初始化

 14.枚举初始化与赋值


1. 两个数不同的二进制位个数

#include<stdio.h>
int main()
{
	int a = 2022;
	int b = 1028;
	int c = a ^ b;
	int count = 0;
	while (c)
	{
		c = c & (c - 1);
		count++;
	}
	printf("%d\n", count);
	return 0;
}

 

 2.原码、反码、补码

int main()
{
	/*首先写出两个数的补码,再按位与,再求出它的原码,按规定打印出来*/
	int a = 3;
	int b = -5;
	//00000000 00000000 00000000 00000011 -- 原码、反码、补码一样
	//10000000 00000000 00000000 00000101 -- 原码
	//11111111 11111111 11111111 11111010 -- 取反
	//11111111 11111111 11111111 11111011 -- 加1得补码
	//00000000 00000000 00000000 00000011 -- 3和-5的补码按位相与
	int c = a & b;
	printf("%d\n", c);//相与的结果以%d的形式打印,即打印一个有符号的整数
	//我们求出的是3和-5的补码按位与的结果存在了c里面
	//但我们需要打印它的原码
	//而c最高位是0,是正数,原码补码反码都一样,故打印3
	return 0;
}

        首先写出两个数的补码,再按位与,再求出它的原码,按规定打印出来

    printf("%d\n", c);//相与的结果以%d的形式打印,即打印一个有符号的整数
    //我们求出的是3和-5的补码按位与的结果存在了c里面
    //但我们需要打印它的原码
    //而c最高位是0,是正数,原码补码反码都一样,故打印3

3.不创建临时变量实现两个数的交换

        容易溢出:

    int a = 3;//0000 0011
	int b = 5;//0000 0101
	a = a + b;//a = 8
	b = a - b;//b = 3
	a = a - b;//a = 5

        采用异或:

    0^a = a;相同为0,不同为1
	0000 0000 0000 0000
	0000 0101 0111 1011 -- a
	0000 0101 0111 1011 -- a
	/*本来是0的还是0,本来是1的还是1*/
	a^a = 0;相同为0
	那么a^a^b = b
	异或支持交换律
	a^(a^b) = b
	b^(a^b) = a
	那么b^b^a = a
	0000 0110 -- a = a^b
	0000 0101 -- b 
	0000 0011 -- b = b^a
	0000 0110 -- a
	0000 0101 -- a = a^b
	a = a ^ b;//a = 3^5
	b = b ^ a;//b = 5^3^5 = 3
	a = a ^ b;//a = 3^5^3 = 5

4.求一个整数存储在内存中的二进制中1的个数

    int a = 31;
	int i = 0;
	int count = 0;
	for (i = 0; i < 32; i++)
	{

		if (((a >> i) & 1) == 1)
		{
			count++;
		}
	}
	printf("%d\n", count);

5. 特例-1

    int b = 0;
	printf("%d\n", ~b);//-1

规定了1111 1111 1111 1111 11111 1111 1111 1111为-1

6.将指定的位置置1

    //改变任意位
    int a = 5;//0000 0101
	//0000 0010
	//0000 0111 -- 7
	a |= (1 << 1);

以改变第1位为例:

        因为按位或,又一个规律,1|x = 1;0|x = x,那么与1相或如果是1还是1,如果是0还是1

 7.将指定位置置1

a &= ~(1 << 1);

8.++a与a++

	int main()
	{
		int c = 3;
		int d = c++;
		printf("%d %d\n", c, d);

		int m = 5;
		int n = ++m;
		printf("%d %d\n", m, n);

		int x = 10;
		printf("%d", x--);//先打印再--

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

		/*printf("\n");
		printf("%d", --x);*/
		return 0;
	}

	int x = 10;
	printf("%d", x--);//先打印再--
	printf("\n");
	printf("%d", x);

9.||与&&

    int i = 0, a = 1, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
    因为a = 1先赋值给i,a = 1为真,故不会对b和d进行计算还是原本的值
	之后a进行自增,故打印的是2234
	printf("%d\n", i);
	printf("%d %d %d %d", a, b, c, d);

	int i = 0, a = 0, b = 2, c = 3, d = 4;
	i = a++ || ++b || d++;
	0为假,故会计算b,b先自增变成3为真,后面不计算
	int j = (a++ || ++b || d++);
	printf("%d\n", i);//1
	printf(" %d\n", j);//1
	printf("%d %d %d %d", a, b, c, d);//1334

10.逗号表达式

逗号表达式,整个表达式的结果是最后一个表达式的结果
int main()
{
int a = 1;
int b = 2;
int c = (a > b, a = b + 10, a, b = a + 1);
printf("%d\n", c);//13
printf("%d %d\n", a ,b);
}

11.srand与rand

#include<stdlib.h>
#include<time.h>

int main()
{
	
	int i = 10;
	int j = 0;
	/*不加这句话每次都是打印相同的随机数*/
	//srand((unsigned int)time(NULL));
	while (i--)
	{
		
		j = (int)rand();
		printf("%d\n", j);
	}
	
	
	return 0;
}

12.sizeof

 13.结构体初始化

	typedef struct student 
	{
		int grade;
		char name[10];
		int telenum[12];
		char age;
		char sex[10];
	}student;
    int main()
    {

	    student Stu = { 1, };//这种初始化就是让第一个成员变量特殊赋值
	    return 0;
    }

 14.枚举初始化与赋值

#define voice_max 100
typedef enum { DG, DN, UDG = 10, UDN } test;	注意test就是我这里给这个枚举类型自定义的一个新的类型名,类似与int,float等。
int main()
{
	//注意test就是我这里给这个枚举类型自定义的一个新的类型名,类似与int,float等。
	test b;

	//b = 2 //  注意此处虽然是对枚举变量赋值,赋的范围虽然也在枚举值范围内,但这是错的,因为你不能用数字直接对其进行赋值。 

	//	b = (test)2;  // 这样就可以了,加一个枚举类型的强制转换即可。

	//test b;
	b = UDG; //b是一个枚举变量,而UDG是一个枚举值常量,这样赋值就是正确的
	printf("%d", b);
	printf("%d", b);
	return 0;
}

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

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

相关文章

一文了解低代码平台

随着数字化转型的加速&#xff0c;企业需要更快速地开发和交付应用程序&#xff0c;以适应市场需求和客户需求的变化。在这种情况下&#xff0c;低代码平台成为了企业的首选方案之一。 想象一下&#xff0c;你可以用一个可视化工具构建自己的应用程序&#xff0c;而无需编写繁琐…

保护IP地址不被窃取的几种方法

随着互联网的普及和信息技术的不断发展&#xff0c;网络安全问题日益凸显。其中&#xff0c;保护个人IP地址不被窃取成为了一个重要的问题。IP地址是我们在互联网上的身份标识&#xff0c;如果被他人获取&#xff0c;就可能导致个人隐私泄露、计算机受到攻击等一系列问题。因此…

你“瞧不起”的拼多多,原来还有这样的一面

有人说&#xff0c;自私是天性&#xff0c;刻印在基因里的本能。也有人持不同意见。 人类学家玛格丽特米德在授课中问学生&#xff0c;文明最早的标志是什么&#xff1f;有人说是陶罐&#xff0c;石器&#xff0c;或者武器&#xff0c;米德告诉他们&#xff0c;是一根愈合的股…

python scoket 多人聊天室 带界面

前言 本来是为了局域网内能够复制段儿代码方便远程调试用的&#xff0c;ssh当然也可以&#xff0c;当然还是我头脑风暴散发&#xff0c;想到这里了。于是从网上拉了一个&#xff0c;改通之后&#xff0c;留一个备份。 期望还是很好的&#xff0c;以后用来支持ubuntu聊天之类的…

新能源钠离子电池污废水如何处理

钠离子电池作为一种新能源电池&#xff0c;已经展示出了广阔的应用前景。然而&#xff0c;随着其生产和使用规模的不断扩大&#xff0c;对其产生的污废水问题也变得越来越重要。如何处理新能源钠离子电池的污废水&#xff0c;已经成为一个必须解决的问题。 首先&#xff0c;我…

第二十五章 解析cfg文件及读取获得网络结构

网络结构 以YOLOv3_SPP为例 cfg文件 部分&#xff0c;只是用来展示&#xff0c;全部的代码在文章最后 [net] # Testing # batch1 # subdivisions1 # Training batch64 subdivisions16 width608 height608 channels3 momentum0.9 de…

基于STM32 +(NVIC)中断概念应用和控制方案

前言 本次我们学习一下STM32的中断控制器—— NVIC&#xff0c;控制着整个STM32芯片中断相关的功能&#xff0c;它跟Cortex-M3 内核紧密联系&#xff0c;是内核里面的一个外设。 本篇博客大部分是自己收集和整理&#xff0c;借鉴了很多大佬的图片和知识点整理&#xff0c;如有侵…

中科大蒋彬课题组开发 FIREANN,分析原子对外界场的响应

内容一览&#xff1a; 使用传统方法分析化学系统与外场的相互作用&#xff0c;具有效率低、成本高等劣势。中国科学技术大学的蒋彬课题组&#xff0c;在原子环境的描述中引入了场相关特征&#xff0c;开发了 FIREANN&#xff0c;借助机器学习对系统的场相关性进行了很好的描述。…

一文读懂:IOPS、延迟和吞吐量等存储性能指标

各位ICT的小伙伴们大家好呀&#xff0c; 在我们谈存储性能的时候&#xff0c;总会听到IOPS、延迟&#xff08;Latency&#xff09;、带宽&#xff08;Bandwidth&#xff09;、吞吐量&#xff08;Throughput&#xff09;以及响应时间&#xff08;Response Time&#xff09;等技…

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下&#xff1a; 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址&#xff0c;它将针对此页面运行一连…

Typora+PicGo+Minio搭建博客图床

文章目录 TyporaPicGoMinio搭建博客图床前言什么是图床?为什么需要图床?准备工作一、Typora二、Picgo1. 下载Picgo2. 下载node.js3. 下载minio插件 三、服务器端配置1. 添加端口到安全组2. 使用Docker安装minio3. 配置minio image-20231127175530696四、minio插件配置五、Typ…

Python入门04字符串

目录 1 字符串的定义2 转义字符3 字符串的常见方法4 分割字符串5 字符串反转6 字符串的链式调用7 格式化字符串8 多行字符串总结 1 字符串的定义 在Python中&#xff0c;字符串表示一个字符的序列&#xff0c;比如 str "hello,world"这里我们定义了一个字符串&…

SpringBoot 入门学习

开发环境配置 JDK 1.8、Maven 3.8.8、 IDEA CE 2023.2 框架介绍 Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置…

STM32F103C8T6——4路PWM

//main()函数前面的extern TIM_HandleTypeDef htim2;extern TIM_HandleTypeDef htim3;//main()函数内部额外添加的HAL_TIM_Base_Start_IT(&htim2);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);HAL_TIM_PWM_Start(&htim2…

深度学习中小知识点系列(三) 解读Mosaic 数据增强

前言 Mosaic数据增强&#xff0c;这种数据增强方式简单来说就是把4张图片&#xff0c;通过随机缩放、随机裁减、随机排布的方式进行拼接。Mosaic有如下优点&#xff1a; &#xff08;1&#xff09;丰富数据集&#xff1a;随机使用4张图片&#xff0c;随机缩放&#xff0c;再随…

[ CSS ] 内容超出容器后 以...省略

内容超出容器后 以…省略 当前效果 代码 <template><div class"box">有志者&#xff0c;事竟成&#xff0c;破釜沉舟&#xff0c;百二秦关终属楚; 有心人&#xff0c;天不负&#xff0c;卧薪尝胆&#xff0c;三千越甲可吞吴</div> </templa…

【Proteus仿真】【Arduino单片机】蔬菜大棚温湿度控制系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、DHT11温湿度传感器、按键、继电器、蜂鸣器、加热、水泵电机等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD160…

TikTok新媒体战略:数字时代的社交营销

引言 随着数字时代的来临&#xff0c;社交媒体已成为企业推广和品牌建设的关键平台之一。而在众多社交媒体中&#xff0c;TikTok以其独特的短视频形式和庞大的用户基数吸引了无数企业和个人创作者。本文将深入探讨TikTok新媒体战略&#xff0c;探讨在数字时代如何利用这一平台进…

距离向量路由协议——RIP

目录 动态路由动态路由简介为什么需要动态路由动态路由基本原理路由协议的分类 距离向量路由协议RIPv1 VS RIPv2RIP简介RIPv1的主要特征RIPv1的基本配置 VS RIPv2的基本配置RIP配置案例被动接口单播更新使用子网地址 动态路由 动态路由简介 为什么需要动态路由 如果采用静态…

3.3VPWM转24VPWM电路

一、MOS管导通原理。 MOS管的两个重要参数 VGS(th)&#xff1a;开启电压 VGS(off)&#xff1a;预夹断电压 VDS(max)漏源破坏电压 1、MOS管&#xff1a; 当0<VGS<VGS(th),MOS管关断。 当VGS>VGS(th)&#xff0c;VDS>0&#xff0c;NMOS管导通。 VGDVGS-VDS&#xff…