C语言入门---位操作

目录

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;
}

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

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

相关文章

时间序列预测实战(二十)自研注意力机制Attention-LSTM进行多元预测(结果可视化,自研结构)

一、本文介绍 本文给大家带来的是我利用我自研的结构进行Attention-LSTM进行时间序列预测&#xff0c;该结构是我专门为新手和刚入门的读者设计&#xff0c;包括结果可视化、支持单元预测、多元预测、模型拟合效果检测、预测未知数据、以及滚动长期预测&#xff0c;大家不仅可…

Vue框架学习笔记——侦听(监视)属性watch:天气案例+immediate+deep深度监听

文章目录 前文提要天气案例描述样例代码呈现效果&#xff1a;事件的响应中可以写一些简单的语句&#xff08;不推荐&#xff09; 侦听&#xff08;监视&#xff09;属性watch结合天气案例的第一种写法&#xff08;New Vue&#xff09;immediate&#xff1a; 侦听&#xff08;监…

linux安装部署redis

1、下载redis包2、解压3、进入解压路径编译安装4、修改配置文件使redis后台运行5、启动 1、下载redis包 https://redis.io/download/ 2、解压 tar -zxvf redis-7.2.3.tar.gz3、进入解压路径编译安装 cd redis-7.2.3 make && make install默认安装路径&#xff1a; …

某医生用 ChatGPT 在 4 个月内狂写 16 篇论文,其中 5 篇已发表,揭密ChatGPT进行论文润色与改写的秘籍

如果写过学术论文&#xff0c;想必会有这样的感受&#xff1a; 绞尽脑汁、茶饭不思、夜不能寐、废寝忘食、夜以继日&#xff0c;赶出一篇论文&#xff0c;然后还被导师点评&#xff0c;“写得就是一坨&#xff01;” 可是&#xff0c;却有人4个月产出了16篇论文&#xff0c;成功…

哈希的应用——位图

位图 题目思考 题干: 给40亿个不重复的无符号整数, 没排过序. 给一个无符号整数, 如何快速判断一个数是否在 这40亿个数中. 看到这个问题可能会想到这样的思路&#xff1a; 1. 遍历, 时间复杂度O(N) 2. 排序 二分查找 3. 利用哈希表或红黑树, 就是放到set或unordered_set里…

10个顶级Linux开源反向代理服务器 - 解析与导航

反向代理服务器是一种部署在客户端和后端/源服务器之间的代理服务器&#xff0c;例如 NGINX、Apache 等 HTTP 服务器或用 Nodejs、Python、Java、Ruby 编写的应用程序服务器、PHP 和许多其他编程语言。 它是一个网关或中间服务器&#xff0c;它接受客户端请求&#xff0c;将其传…

【MATLAB】LMD分解+FFT+HHT组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 LMDFFTHHT组合算法是一种基于局部均值分解&#xff08;LMD&#xff09;、快速傅里叶变换&#xff08;FFT&#xff09;和希尔伯特-黄变换&#xff08;HHT&#xff09;的组合算法。 LMD是…

Python实现WOA智能鲸鱼优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提…

Spatialite获取点线面集合的中心点

在这里插入代码片sql SELECT ST_AsText(ST_Centroid(ST_GeomFromText(GEOMETRYCOLLECTION(LINESTRING(105.400538 26.965642, 105.376419 26.938482, 105.350328 26.911685, 105.329089 26.879879, 105.313625 26.84789, 105.301742 26.813179, 105.292141 26.775107, 105.2858…

【技巧】Excel表格如何退出“只读方式”?

如果Excel表格被设置了“只读模式”&#xff0c;那每次打开Excel都会出现对话框提示是否以“只读方式”打开&#xff0c;并且以“只读方式”打开的Excel&#xff0c;如果进行更改是无法保存原文件的。那要如何退出“只读方式”呢&#xff1f; 首先&#xff0c;我们要看下Excel表…

策略算法与Actor-Critic网络

策略算法 教程链接 DataWhale强化学习课程JoyRL https://johnjim0816.com/joyrl-book/#/ch7/main 策略梯度 与前面的基于价值的算法不同&#xff0c;这类算法直接对策略本身进行近似优化。 在这种情况下&#xff0c;我们可以将策略描述成一个带有参数 θ θ θ的连续函数…

java小游戏之【王者荣耀】

首先创建一个新的Java项目命名为“王者荣耀”&#xff0c;并在src下创建两个包分别命名为“com.sxt"、”com.stx.beast",在相应的包中创建所需的类。 代码 package com.sxt;import javax.swing.*; import java.awt.*;public class Background extends GameObject {p…

Qt_一个由单例引发的崩溃

Qt_一个由单例引发的崩溃 文章目录 Qt_一个由单例引发的崩溃摘要关于 Q_GLOBAL_STATIC代码测试布局管理器源码分析Demo 验证关于布局管理器析构Qt 类声明周期探索更新代码获取父类分析Qt 单例宏源码 关键字&#xff1a; Qt、 Q_GLOBAL_STATIC、 单例、 UI、 崩溃 摘要 今…

深入解析:Peft Adapter与LLM融合

在增量预训练阶段或有监督微调阶段使用高效微调方法(Lora)时会产生adapter文件,相当于是一个“补丁”。那么如何将“补丁”与原始模型合并呢? 下面将对模型合并代码进行解读。 相关代码将全部上传到github: https://github.com/hjandlm/LLM_Train 欢迎关注公众号 代码…

HarmonyOS应用开发者基础认证【题库答案】

HarmonyOS应用开发者高级认证【题库答案】 一、判断 首选项preferences是以Key-Value形式存储数据&#xff0c;其中Key是可以重复。&#xff08;错&#xff09;使用http模块发起网络请求时&#xff0c;必须要使用on(‘headersReceive’&#xff09;订阅请求头&#xff0c;请…

PHP 双门双向门禁控制板实时监控源码

本示例使用设备&#xff1a; 实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) <?PHPheader("content-type:text/html;charsetGBK");$ThisIpget_local_ip(); //获取电脑IP地址 $server udp://.$ThisIp.:39192; $sock…

每天一道算法题:51. N 皇后

难度 困难 题目 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n_ _皇后问题 的…

FPGA模块——AD高速转换模块(并行输出转换的数据)

FPGA模块——AD高速转换模块&#xff08;并行输出转换的数据&#xff09; &#xff08;1&#xff09;AD9280/3PA9280芯片&#xff08;2&#xff09;代码 &#xff08;1&#xff09;AD9280/3PA9280芯片 AD9280/3PA9280芯片的引脚功能&#xff1a; 工作电压2.7到5.5v 数据对应&a…

代码随想录算法训练营第五十七天|739. 每日温度、496.下一个更大元素 I

LeetCode 739. 每日温度 题目链接&#xff1a;739. 每日温度 - 力扣&#xff08;LeetCode&#xff09; 单调栈开始&#xff0c;为什么要用栈&#xff0c;因为栈是先入后出&#xff0c;当我们遍历从前往后的时候&#xff0c;每次遍历的元素都是添加至栈尾&#xff0c;方便我们进…

西南科技大学电路分析基础实验A1(一阶电路的设计)

目录 一、实验目的 二、实验设备 三、预习内容(如:基本原理、电路图、计算值等) 四、实验数据及结果分析(预习写必要实验步骤和表格) 1. 观测一阶电