考研C语言复习进阶(1)

目录

1. 数据类型介绍

1.1 类型的基本归类:

 2. 整形在内存中的存储

2.1 原码、反码、补码

2.2 大小端介绍

3. 浮点型在内存中的存储

​编辑


1. 数据类型介绍


前面我们已经学习了基本的内置类型:

char     //字符数据类型
short    //短整型
int     //整形
long     //长整型
long long  //更长的整形
float    //单精度浮点数
double    //双精度浮点数

以及他们所占存储空间的大小。
类型的意义:
1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)。
2. 如何看待内存空间的视角。 

1.1 类型的基本归类:


整形家族: 

char
unsigned char
signed char
short
unsigned short [int]
signed short [int]
int
unsigned int
signed int
long
unsigned long [int]
signed long [int]

浮点数家族: 

float
double 

构造类型 :

> 数组类型
> 结构体类型 struct
> 枚举类型 enum
> 联合类型 union

指针类型 :

int *pi;
char *pc;
float* pf;
void* pv; 

空类型: 

void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。 

 2. 整形在内存中的存储


我们之前讲过一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。
那接下来我们谈谈数据在所开辟内存中到底是如何存储的?

比如: 

int a = 20;
int b = -10; 

我们知道为 a 分配四个字节的空间。
那如何存储?
下来了解下面的概念:


2.1 原码、反码、补码


计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位
正数的原、反、补码都相同。
负整数的三种表示方法各不相同。 

原码
直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码
将原码的符号位不变,其他位依次按位取反就可以得到反码。 

补码
反码+1就得到补码。 

对于整形来说:数据存放内存中其实存放的是补码。
为什么呢?
在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统
一处理;
同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程
是相同的,不需要额外的硬件电路。 

2.2 大小端介绍


什么大端小端:
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址
中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地
址中。
为什么有大端和小端 

为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元
都对应着一个字节,一个字节为8 bit。但是在C语言中除了8 bit的char之外,还有16 bit的short
型,32 bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32
位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因
此就导致了大端存储模式和小端存储模式。
例如:一个 16bit 的 short 型 x ,在内存中的地址为 0x0010 , x 的值为 0x1122 ,那么 0x11 为
高字节, 0x22 为低字节。对于大端模式,就将 0x11 放在低地址中,即 0x0010 中, 0x22 放在高
地址中,即 0x0011 中。小端模式,刚好相反。我们常用的 X86 结构是小端模式,而 KEIL C51 则
为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式
还是小端模式。 

百度2015年系统工程师笔试题:
请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分) 

//代码1
#include <stdio.h>
int check_sys()
{
int i = 1;
return (*(char *)&i);
}
int main()
{
int ret = check_sys();
if(ret == 1)
{
printf("小端\n");
}
else
{
printf("大端\n");
}
return 0;
}
//代码2
int check_sys()
{
union
{
int i;
char c;
}un;
un.i = 1;
return un.c;
}

3. 浮点型在内存中的存储

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

前端之用HTML弄一个古诗词

将进酒 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>将进酒</title><h1><big>将进酒</big> 君不见黄河之水天上来</h1><table><tr><td ><img…

借助ChatGPT提高编程效率指南

PS: ChatGPT无限次数&#xff0c;无需魔法&#xff0c;登录即可使用,网页打开下面 一、借助ChatGPT提高编程效率指南 随着计算机技术的飞速发展&#xff0c;编程已经成为了现代社会中一个非常重要的技能。对于许多人来说&#xff0c;编程不仅是一项工作技能&#xff0c;而且是…

智能技术上的“是”并不代表具体领域的“应该”

技术上的“是”并不代表具体领域的“应该” 。技术上的“是”仅仅是指某种方法或技术在实践中是否可行或有效&#xff0c;而不涉及是否该采取这种方法或技术。决定是否采取某种方法或技术还需要考虑伦理、法律、可行性等其他方面的因素。技术的发展可能会有各种可能性&#xff…

web蓝桥杯真题:分阵营,比高低

代码&#xff1a; function orderStudentGrade(students) {// TODO: 在这里写入具体的实现逻辑// 将学生的成绩按班级分组&#xff0c;同一班级中按照总分从高到底排序if(students.length 0) {return {}}// 排序函数&#xff0c;按照总分降序const compare (a, b) > {con…

操作系统系列学习——操作系统之“树”

文章目录 前言操作系统之“树” 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招&#xff0c;计划学习操作系统并完成6.0S81&#xff0c;加油&#xff01; 本文总结自B站【哈工大】操作系统 李治军&#xff08;全32讲&#xff09; 老师课程讲的非常好&#xff0c;感谢 【哈…

nextTick的作用

nextTick用于———获取更新后的dom内容 使用场景&#xff1a;应用第三方插件如by scroll、echarts图表时&#xff0c;可能计算的宽高有偏差&#xff0c;插件延迟计算了宽高等数据内容&#xff0c;此时插件内容需要在nextTick中调用 参考&#xff1a;vue面试题-什么是nextTic…

spring创建bean方式

https://www.cnblogs.com/lgjlife/p/11060570.html java创建bean的方式有哪些 - 问答 - 亿速云 参考以上文章 首先IOC 是什么 是&#xff1a;控制反转 依赖注入&#xff08;DI&#xff09; 创建bean与注入bean要区分开 创建了说明已经在spring容器中了&#xff0c;要用的时…

sqllab第五关通关笔记

知识点&#xff1a; 报错注入函数语法&#xff08;详见第二关笔记&#xff09;报错注入打印位数最多32位对于大于32位的数据最好使用截取函数进行控制&#xff1b;以保证输出完整mysql表中的重点数据库 information_schema &#xff08;mysql 5.0以上&#xff09; schemata …

每日一题 — 长度最小的子数组

LCR 008. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 首先在暴力枚举的方法下&#xff0c;我们可以进行优化&#xff0c;让right不用从头开始&#xff0c;只需让left移动&#xff0c;进行判断。然后就是变成了同向双指针&#xff0c;也就是滑…

sql设置插入之前进行判断,是否数据重复,出现过则不添加

在SQL中&#xff0c;可以使用INSERT IGNORE语句来实现在插入数据之前进行判断&#xff0c;如果数据已经存在则不会添加。 假设有以下表结构&#xff1a; CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100) NOT NULL UNIQ…

责任链模式-C#实现

责任链模式指的是——某个请求需要多个对象进行处理&#xff0c;从而避免请求的发送者和接收之间的耦合关系。 将这些对象连成一条链子&#xff0c;并沿着这条链子传递该请求&#xff0c;直到有对象处理它为止。 主要涉及两个角色&#xff1a; 抽象处理者角色&#xff08;Hand…

【测试开发学习历程】Linux用户管理+文件权限管理

目录 一、用户管理 &#xff08;一&#xff09;用户和用户组的基本概念 1.概念 2.设置原因 3.用户与用户组的关系 4.用户类型 &#xff08;二&#xff09;用户的创建、修改属性和删除用户 1.用户信息文件 2.创建用户 3.修改用户密码 4.修改用户信息 5.用户查询 6.…

odoo中使用onchange方法基本操作

在Odoo中&#xff0c;onchange方法用于在用户界面上动态更新字段值&#xff0c;而compute方法则用于计算字段的值。这两种方法通常用于表单视图&#xff0c;以提供动态和互动的用户体验。下面将通过一个例子来详细解释如何在Odoo中定义和使用onchange和compute方法&#xff0c;…

MAMP Pro 站点404 Nginx 配置

MAMP Pro 站点配置 if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s/$1 last;break; }

第十四届蓝桥杯C++B组编程题题目以及题解

a.冶炼金属&#xff08;二分&#xff09; 思路&#xff1a; 设任意一条冶炼记录投入金属数量为a,产出金属为b. 对于每一条冶炼记录我们都可以得到 一个转换率V的范围&#xff1a; b<a/v<b1即a/b< v <a/(b1) 为什么是b1呢&#xff1f;因为既然能产出b个金属&#xf…

实现的一个网页版的简易表白墙

实现的一个网页版的表白墙 实现效果 代码截图 相关代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><tit…

【Java】初级篇:基本语法

一、变量与运算符 标识符命名规则 由26个英文字母大小写、0-9、_或$组成&#xff1b;不可以以数字开头&#xff1b;不能单用关键字和保留字&#xff1b;区分大小写&#xff1b;不包含空格。 【包名&#xff1a;所有字母小写|类名、接口名&#xff1a;多单词组成时所有字母首字…

1.6数组

一.序言 数组是一组类型相同类型元素的集合&#xff0c;数组的定长的&#xff08;数组的长度一旦被定义&#xff0c;长度不可改变&#xff09;。 数组在内存当中是一块连续的空间&#xff0c;可以保存相同类型的多个元素。 二.一维数组 2.1.数组的创建 int arr1[10]; …

Android的UI渲染机制(一)

应用程序与Surface的关系&#xff0c;从应用程序的Activity开始&#xff0c;一路追踪到ViewRoot、WindowManager Service。 SurfaceFlinger则主要负责视图的显示&#xff0c;其管理多个surface进行图像合成。WindowManager Service由System_Server进程启动&#xff0c;SurfaceF…

昆山人事代理尽在邦芒人力 有效降低企业用工成本新选择

人事代理作为一种现代且高效的外包管理方式&#xff0c;允许客户根据企业实际需求&#xff0c;将一项或多项人事事务或职能委托给专业的人事外包公司进行处理。通过这种方式&#xff0c;企业可以显著降低人力资源管理成本&#xff0c;同时提升管理效率。 邦芒凭借庞大的全国直…