C语言刷题--内存存储、操作符

news2024/11/20 16:35:03

在这里插入图片描述

  • 魔王的介绍:😶‍🌫️一名双非本科大一小白。
  • 魔王的目标:🤯努力赶上周围卷王的脚步。
  • 魔王的主页:🔥🔥🔥大魔王.🔥🔥🔥
    在这里插入图片描述
    ❤️‍🔥大魔王与你分享:“没什么好难过的,只是错把路灯当成了月亮”。

文章目录

  • 一、内存存储
    • 1、位段的理解
    • 2、大小端、联合
  • 二、操作符
    • 1、按位操作符
    • 2、按位操作符
    • 3、按位异或(^),移位操作符
      • 知识点:
      • 思路:
      • 代码实现:
  • 三、总结

一、内存存储

1、位段的理解

题目:求运行结果
在这里插入图片描述
求运行结果()

分析:创建的puc数组为4个char类型成员,结构体指针pstPimDate指向这个puc这个数组(强转的形式把首元素指针puc赋给结构体指针pstPimDate,那么之后看待的角度是根据这个结构体指针的角度来看待的)。
第一个成员大小为一字节也就是8bit,第二个成员只分配了1bit,第三个分配了2bit,第四个分配了3bit。
接下来进行赋值,如图:
在这里插入图片描述

正数原反补相同,所以原码就是补码。。

不同编译器结果可能不一样,因为位段占用的bit空间不确定是从每个字节的开头往高地址用还是每个字节的结尾往小地址用。

所以结果为:02 29 00 00

2、大小端、联合

题目:按照小端字节序存储,问输出的结果
在这里插入图片描述

小端即小端字节序存储,存放的规律为:低位在低地址,高位放在高地址。
i[0]为低位,放的是39,i[1]为高位,放的是38。 即内存中:39(低位) 38(高位)
当内存读取时,会按照小端的特点进行读取,也就是将低位的数当做小数,将高位的数当作大树,所以按照十六进制输出的结果是 38 39

二、操作符

1、按位操作符

题目:统计二进制中1的个数
思路:

采用遍历法,每次判断一位。判断后让1左移一位继续判断,直到32位判断完。

代码如下:

#include <stdio.h>
int count(int a)
{
	int n = 0;
	for (int i = 0; i < 32; i++)
	{
		if ((a & (1 << i)) != 0)
			n++;
	}
	return n;
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	int num = count(a);
	printf("%d\n", num);
	return 0;
}

2、按位操作符

题目:打印整数二进制的奇数位和偶数位。
思路:

奇数就从1开始每次左移两个,偶数就从0开始每次左移两个。

代码实现:

#include <stdio.h>
void print(int a)
{
	int i = 0;
	printf("打印奇数二进制位:");
	while (i < 32)
	{
		if ((a & (1 << i)) == 0)
		{
			printf("0");
		}
		else
			printf("1");
		i += 2;
	}
	printf("\n打印偶数二进制位:");
	i = 1;
	while (i < 32)
	{
		if ((a & (1 << i)) == 0)
		{
			printf("0");
		}
		else
			printf("1");
		i += 2;
	}
}
int main()
{
	int a = 0;
	scanf("%d", &a);
	print(a);
	return 0;
}

3、按位异或(^),移位操作符

题目:找单身狗:一个数组中只有两个数字是出现一次,其他所有数字都出现了两次,编写一个函数找出这两个只出现一次的数字。

知识点:

右移操作符>> :二进制序列向右移一位,逻辑移位左边补0,算数移位左边补原来的。
左移操作符>> :二进制序列向左移一位,右边补0
按位与& :有0为0,两个为1才为1
按位异或^ :相同为0,不同为1.

思路:

首先将数组里的数都按位异或一遍,那么结果就是两个单身狗的值。
在这个值的二进制序列里任意找一位为1的(说明它们这里不一样),以此为界,分成两个数组,用按位与(&)来实现让这个位置的二进制序列为1的去一个数组里,不为1的去另一个数组。
这样两个不相等的书就会存放在不一个数组中。
让这两个数组分别按位异或,最后的值就是单身狗的值。

代码实现:

//找单身狗
#include <stdio.h>
#include <stdlib.h>
void FindDog(int* arr1, int sz)
{
	int sum = 0;
	int tep = 0;
	int* arr2 = NULL;
	int* arr3 = NULL;
	arr2 = calloc(sz,sizeof(int));
	if (arr2 == NULL)
	{
		return;
	}
	arr3 = calloc(sz, sizeof(int));
	if (arr3 == NULL)
	{
		return;
	}
	for (int i = 0; i < sz; i++)
	{
		sum ^= arr1[i];
	}//先找出数组中两个单身狗按位异或的值。
	for (int i = 0; i < 32;i++)
	{
		if ((sum & (1<<i)) != 0)//跟0比,如果!=0,说明二进制中第i位不是0
		{
			tep = i;
			break;
		}
	}//找出两个单身狗按位异或的值的二进制位中不一样的一项,以这一项为分界,分为两部分,那么这两个数会位于不同的部分。
	for (int i = 0; i < sz; i++)
	{
		if ((arr1[i] & (1 << tep)) == 0)//分组,二进制中第i位是0的放一起,不是的放一起
		{
			arr2[i] = arr1[i];
		}
		else
		{
			arr3[i] = arr1[i];
		}
	}
	int m = 0;
	for (int i = 0; i < sz; i++)
	{
		m ^= arr2[i];//寻找两个单身狗按位异或后的二进制序列里不相同的一项。
	}
	printf("%d\n", m);//打印本数组中的单身狗
	int n = 0;
	for (int i = 0; i < sz; i++)
	{
		n ^= arr3[i];
	}
	printf("%d\n", n);//打印本数组中的单身狗
}
int main()
{
	int arr[] = {1,1,2,2,4,6};
	FindDog(arr, sizeof(arr)/sizeof(arr[0]));
	return 0;
}

if ((sum & (1<<i)) != 0)这个式子sum&(1<<i)要再加一层括号是因为优先级。在这里插入图片描述

三、总结

在这里插入图片描述
✨✨请点击下面关注大魔王✨✨
❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥大魔王.❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥❤️‍🔥

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

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

相关文章

04-Mysql常用操作

1. DDL 常见数据库操作 # 查询所有数据库 show databases; # 查询当前数据库 select databases();# 使用数据库 use 数据库名;# 创建数据库 create database [if not exits] 数据库名; # []代表可选可不选# 删除数据库 drop database [if exits] 数据库名; 常见表操作 创建…

Nestjs实战干货-概况-中间件-Middleware

中间件 中间件是一个在路由处理程序之前被调用的函数。中间件函数可以访问请求和响应对象&#xff0c;以及应用程序的请求-响应周期中的next()中间件函数。下一个中间件函数通常由一个名为next的变量来表示。 Nest 中间件在默认情况下等同于Express中间件。下面是来自官方 exp…

MBD—模型的回调函数

目录 前面 如何设置&#xff1f; 应用 简单的提示 数据的初始化 前面 常用的回调函数有三类&#xff1a;模型的回调函数、模块的回调函数、信号的回调函数。这里分享一下模型的回调函数。 回调函数就是CallBack. 如何设置&#xff1f; 打开一个模型&#xff0c;在空白…

【计算机网络】TCP拥塞控制、丢包重传机制与滑动窗口机制

文章目录TCP 拥塞控制原理为什么拥塞期间&#xff0c;发送方会收到接收方的重复确认&#xff1f;TCP 滑动窗口机制原理TCP 丢包重传机制TCP 拥塞控制原理 TCP拥塞控制是指在网络拥塞的情况下&#xff0c;TCP协议通过调整发送数据的速率来避免网络拥塞的一种机制。TCP拥塞控制的…

物料分类视图:200 和 300 分类测试记录

一、概述 测试目的&#xff1a;将销售订单中成品对原材料的需求&#xff0c;通过MRP运行&#xff0c;传递到生产订单中 系统版本&#xff1a;S4 工厂代码&#xff1a;1001(计划工厂) 、1008(执行工厂) 成品: CP0000535 原材料&#xff1a; 编码 描述 板材特性 123…

国内 中 大 型 IT 软件 外包公司 名单 汇总(2023 最新版!)

文章目录***\*1、软件外包公司名单\*******\*2、如何区分是否是外包公司\*******\*3、外包公司真是无一是处吗&#xff1f;\*******\*4、软件外包的几种形式\*******\*5、哪些情况可选择外包\****结语1、软件外包公司名单2、如何区分是否是外包公司3、外包公司真是无一是处吗&a…

【Transformer系列(1)】encoder(编码器)和decoder(解码器)

前言 这个专栏我们开始学习transformer&#xff0c;自推出以来transformer在深度学习中占有重要地位&#xff0c;不仅在NLP领域&#xff0c;在CV领域中也被广泛应用&#xff0c;尤其是2021年&#xff0c;transformer在CV领域可谓大杀四方。 在论文的学习之前&#xff0c;我们…

【C++】类和对象—日期类的实现

目录一、日期类的功能二、获取月的天数三、Date类中的默认成员函数构造函数析构函数拷贝构造赋值运算符重载取地址操作符重载和const取地址操作符重载四、运算符重载&#x1f312;、、-、-日期天数日期天数日期-天数日期-天数&#x1f312;、!、>、>、<、<日期-日期…

C++ :websocket 通讯下的五种 I/O 模型

目录 I/O 多路复用&#xff08;一种同步 I/O 模型&#xff09; 非阻塞与阻塞 select、poll、epoll 起因 改善 select 与 poll 的差别 I/O 模型 阻塞 I/O 模型 非阻塞 I/O 模型 I/O 多路复用模型 信号驱动 I/O 模型&#xff08;SIGIO&#xff09; 异步 I/O 模型&…

VirtualBox下Ubuntu系统磁盘扩容

1. 正确扩容虚拟硬盘&#xff1a;修改虚拟硬盘和快照的虚拟硬盘大小 打开VirtualBox所在目录&#xff0c;打开cmd&#xff0c;输入命令VBoxManage list hdds&#xff0c;这样能够列出所有的虚拟磁盘。找到你需要扩容的磁盘输入命令VBoxManage" modifyhd "D:\Pat\to\…

米尔STM32MP135核心板 又一款入门级嵌入式开发平台

自2007年意法半导体&#xff08;ST&#xff09;推出STM32首款Cortex-M内核 MCU,十几年来&#xff0c;ST在MCU领域的发展是飞速向前的。而2019年ST发布了全新的STM32MPU系列产品线&#xff0c;STM32MP1作为新一代 MPU 的典范&#xff0c;有着极富开创意义的异构系统架构兼容并蓄…

WMS智能仓储

子产品介绍篇--智能仓储 智能仓储 我们通常也称 WMS 系统。是一个实时的计算机软件系统&#xff0c;它能够按照运作的业务规则和运算法则&#xff0c;对信息、资源、行为、存货和分销运作进行更完美地管理&#xff0c;提高效率。 一. 仓储管理系统&#xff08;wms&#xff09;…

javaweb过滤器与监听器

一、过滤器程序的基本结构、web.xml文件的配置过程和过滤器的执行过程 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&quo…

MobPush创建推送

功能说明 MobPush提供遵循REST规范的HTTP接口&#xff0c;适用各开发语言环境调用。 IP绑定 工作台可以绑定服务器IP地址&#xff0c;未绑定之前所有IP均可进行REST API的调用&#xff0c;绑定后进仅绑定的IP才有调用权限。 调用地址 POSThttp://api.push.mob.com/v3/push/c…

03.vue3的计算属性

文章目录1.计算属性1.get()和set()2.computed的简写3.computed和methods对比2.相关demo1.全选和反选2.todos列表1.计算属性 模板内的表达式非常便利&#xff0c;但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护。所以&#xff0c;对于任何…

CRM系统是什么?它有什么作用?

CRM系统是什么&#xff1f; CRM是Customer Relationship Management&#xff08;客户关系管理&#xff09;的缩写&#xff0c;是一种通过对客户进行跟踪、分析和管理的方法&#xff0c;以增加企业与客户之间的互动和联系&#xff0c;提高企业与客户之间的互信&#xff0c;从而…

GoNote第一章 环境搭建

GoNote第一章 环境搭建 golang介绍 1. 语言介绍 Go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发&#xff0c;后来还加入了Ian Lance Taylor, Russ Cox等人&#xff0c…

oracle远程克隆pdb

使用远程克隆的先决条件是: oracle版本是12.2以上,开启归档模式以及本地undo. 这里是想从172.16.12.250将PRODPDB1克隆到172.16.12.251下&#xff0c;命名为PRODPDB1COPY。 1 确保源端数据库开启归档模式 备注&#xff1a;进cdb里开启归档。 2 在源数据库中&#xff0c;确保…

2023年环境工程与生物技术国际会议(CoEEB 2023)

会议简介 Brief Introduction 2023年环境工程与生物技术国际会议(CoEEB 2023) 会议时间&#xff1a;2023年5月19日-21日 召开地点&#xff1a;瑞典马尔默 大会官网&#xff1a;www.coeeb.org 2023年环境工程与生物技术国际会议(CoEEB 2023)将围绕“环境工程与生物技术”的最新研…

【教程】Unity 与 Simence PLC 联动通讯

开发平台&#xff1a;Unity 2021 依赖DLL&#xff1a;S7.NET 编程语言&#xff1a;CSharp 6.0 以上   一、前言 Unity 涉及应用行业广泛。在工业方向有着一定方向的涉足与深入。除构建数据看板等内容&#xff0c;也会有模拟物理设备进行虚拟孪生的需求需要解决。而 SIMATIC&a…