数据在内存中的存储以及百度笔试题

目录

一.整型家族

什么是大小端存储(百度笔试题)

大端字节序存储

小端字节序存储

为什么要讨论大小端字节序存储

写一个程序判断是大端还是小端存储(百度笔试题)

思路:用1去判断,如果返回1则是小端,如果返回0则是大端。

例题1:输出结果:%d打印十进制有符号整型

第二题 %u打印无符号整数

 第三题:

 什么是截断:

 第四题:

 第五题


一.整型家族

  1. char 
    1. unsigned char
    2. sighned char 是否等于char取决于编译器
  2. long 
    1. unsigned long    [int]
    2. sighned long [int] 
  3. short
    1. unsigned short    [int]
    2. sighned char [int] 
  4. int 
    1. unsigned int
    2. sighned  int = int 

二. 构造类型(自定义类型)

  1. 数组类型
  2. 结构体类型 struct
  3. 枚举类型 enum
  4. 联合类型 union

三.指针类型

四.空类型

五. 整数在内存中的存储

  1. 原码
  2. 反码
  3. 补码(内存中存的是补码)

最高位为符号位,其他位为有效位:有符号整型,

 

为什么数据存放在内存中要用补码的形式

什么是大小端存储(百度笔试题)

在内存中可以自定义顺序,但是只有从大到小,或者从小到大最为方便。

其中:

  1. 递增的如11 22 33 44 为大端存储
  2. 递减的如44 33 22 11 为小端存储

 如地址:0x11223344 是十六进制,一位十六进制如1为0001占四个bit空间,11占8个bit空间,所以两个十六进制位占一个字符(8bit)。

大端字节序存储

0x11223344:将高字节如11放在低地址处,低位字 节放在高地址处,为大端存储

小端字节序存储

0x11223344:将低字节如44放在低地址处,高位字节放在高地址处为小端存储

为什么要讨论大小端字节序存储

这是因为,如int型,占4个字节/8个字节,等等需要占多个字节才需要考虑顺序问题。

比如char型只用占一个字节,就不用考虑顺序问题。

 

写一个程序判断是大端还是小端存储(百度笔试题)

思路:用1去判断,如果返回1则是小端,如果返回0则是大端。

将1的二进制补码为0000 0000 ..... 0000 0001,那么它的十六进制为0x00 00 00 01,一个字节8位bit,所以在地址中存储为00 00 00 01,所以如果高地址是 1那么就是小端存储,返回0则是大端存储。 

写法一:

int check_sys()
{int a = 1;char* p = (char*)&a;if (*p == 1)return 1;elsereturn 0;
}int main()
{if(check_sys()==1){printf("小端");}else{printf("大端");}return 0;
}

写法二:

int check_sys()
{int a = 1;if (*(char*)&a == 1)return 1;elsereturn 0;
}int main()
{if(check_sys()==1){printf("小端");}else{printf("大端");}return 0;
}

写法三:

int check_sys()
{int a = 1;return *(char*)&a;
}int main()
{if(check_sys()==1){printf("小端");}else{printf("大端");}return 0;
}

错误写法:这里a已经从内存取出来,a的类型已经成型了,不能在强制类型转换了。

 

例题1:输出结果:%d打印十进制有符号整型

首先:-1的32位二进制位1000 0000 0000 0000 0000 0000 0000 0001

然后:转化为补码:1111 1111 1111 1111 1111 1111 1111 1111

由于是char型,一个字节只有8bit,所以-1为:1111 1111

 由于是char型,打印为%d(是十进制符号整型),所以要整型提升。

 整型提升:由符号位决定

char = -1和signed char -1 ;符号位为1 ;所以将1111 1111 整型提升补1为1111 1111 1111 1111 1111 1111 1111 1111 转化为原码的十进制为-1.

unsigned char -1 整型提升 ,由于是无符号数,所有位数都是有效位,所以最高位用0补位,补位为0000 0000 0000 0000 0000 0000 1111 1111,由于他是无符号数,所以它是正数,所以补码就是原码,所以他是 255

第二题 %u打印无符号整数

第一步:-128;计算机中原码:1000 0000 0000 0000 0000 0000 1000 0000

第二步:补码:1111 1111 1111 1111 1111 1111 1000 0000,所以计算机中只存1000 0000

第三步:由于是char型打印成无符号整型,所以要整型提升,由于char型是有符号所以用符号位1提升1111 1111 1111 1111 1111 1111 1000 0000;

第四步:由于是%u是无符号整型,所以所有位都是有效位,且无符号数原码反码补码相同,所以结果为

 

 第三题:

虽然,char型只能存一个字节即8bit位,但是防不住初始化给你一个大于127的,所以就会发生截断。

128:原码 0000 0000 0000 0000 0000 0000 1000 0000,

          补码 0111 1111 1111 1111 1111 1111 1000 0000

        char只存放:1000 0000

        整型提升:1111 1111 1111 1111 1111 1111 1000 0000

        所以结果和上题一样。

 什么是截断:

例如有符号char一个字节8为字符,其中第一位为符号位;无符号unsigned char 是从0-255,

有符号是从0-127,-127-(-1)。

所以超过127的部分,也等于127。超过255的地方也等于255。

特殊 我们约定有符号 1000 0000,这里1是符号位,但是将补码按位取反加1,后超过8位,所以我们约定1000 0000 为-128.

 第四题:

 i 的原码:1000 0000 0000 0000 0000 0000 0001 0100

补码为 1111 1111 1111 1111 1111 1111 1110 1100

j的,j是无符号整型原码(原反补码都相同):0000 0000 0000 0000 0000 0000 1010 

相加: 0000 0000 0000 0000 0000 0000 1010 

        + 1111 1111 1111 1111 1111 1111 1110 1100


      =   1111 1111 1111 1111 1111 1111 1111 0110

补码为 1000 0000 0000 0000 0000 0000 0000 1001

     =     -10

因为%d为有符号整型,所以要保留最高位为符号位。

 第五题

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

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

相关文章

SHERlocked93 的 2023 年终总结

工作之后感觉一年一年过的太快,没有个记录连回忆都无从回忆起,之前的年终总结: SHERlocked93 的 2022 年终总结SHERlocked93 的 2021 年终总结SHERlocked93 的 2020 年终总结SHERlocked93 的 2019 年终总结SHERlocked93 的 2018 年终总结SHER…

静态时序分析:SDC约束命令set_clock_latency详解

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 时钟的延迟可以使用set_clock_latency命令设置,这里的时钟延迟包括源延迟(source latency),即时钟对象到时钟源对象(时钟定义…

MyBatisPlus 整合 SpringBoot 遇见的问题

【异常】:Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘udf1’ in ‘field list’… SQL: SELECT id,oper_id,btch_id,udf1, FROM scan_cyber Cause: java.sql.SQLSyntaxErrorException: Unknown column ‘udf1’ in ‘field list’; ,"messag…

CleanMyMac X好不好用?如何下载2024最新版本

CleanMyMac X是一款好用的系统优化软件,具有简洁的界面和多样的功能,能够支持系统垃圾、图片、邮件、iTunes清理,移除恶意软件,优化系统和释放多余空间等。 CleanMyMac X全新版下载如下: https://wm.makeding.com/iclk/?zoneid4…

【HarmonyOS】鸿蒙开发之Text组件——第3.2章

text组件属性介绍 textAlign有三种属性start(默认),end,center Column(){//默认文字大小16Text("迪加奥特曼").width(200)Text().margin({top:10,bottom:10})Text("泰罗奥特曼").width(200).fontSize(26).fontColor(Color.Red).textAlign(TextAlign.End)…

计算机设计大赛 深度学习二维码识别

文章目录 0 前言2 二维码基础概念2.1 二维码介绍2.2 QRCode2.3 QRCode 特点 3 机器视觉二维码识别技术3.1 二维码的识别流程3.2 二维码定位3.3 常用的扫描方法 4 深度学习二维码识别4.1 部分关键代码 5 测试结果6 最后 0 前言 🔥 优质竞赛项目系列,今天…

【Java】Static关键字与类的实例化

关键字:static 作用:主要用于内存管理 范围:可以用在变量、方法、代码块和嵌套类上。java关键字属于类,但不是类的实例。 类的成员变量包括: 【静态变量/类变量】:指被static修饰的成员变量 运行时&#…

离线数仓(二)【用户行为日志采集平台搭建】

用户行为日志采集平台搭建 1、用户行为日志概述 用户行为日志的内容,主要包括用户的各项行为信息以及行为所处的环境信息。收集这些信息的主要目的是优化产品和为各项分析统计指标提供数据支撑。收集这些信息的手段通常为埋点。 目前主流的埋点方式,有代…

【Kubernetes in Action笔记】1.快速开始

在Kubernetes上运行一个程序 基础运行环境 当前的运行环境为使用虚拟机构建的单master集群。 [rootk8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Ready control-plane 109d v1.27.1 k8s-node1 Ready …

代码随想录算法训练营第十六天 | 104.二叉树的最大深度,111.二叉树的最小深度,222.完全二叉树的节点个数 [二叉树篇]

代码随想录算法训练营第十六天 LeetCode 104.二叉树的最大深度题目描述思路递归后序遍历参考代码递归前序遍历参考代码总结 LeetCode 111.二叉树的最小深度题目描述思路参考代码 LeetCode 222.完全二叉树的节点个数题目描述思路后序遍历参考代码1后序遍历参考代码2 LeetCode 10…

Stable Diffusion ComfyUI安装详细教程

上一篇文章介绍了sd-webui的安装教程,但学习一下ComfyUI这种节点流程式的对理解AI绘画有较大帮助,而且后期排查错误会更加方便,熟练后用这种方式做AI绘画可玩性会更多。 文章目录 一、安装包说明二、安装文件介绍三、安装步骤四、汉化五、云主…

Linux-ls命令

目录 ls:查看目录下文件/文件夹 ls -l:列表显示文件 ls -a:显示所有文件正常情况下‘ . ’开头的文件是隐藏的 ls -la:以列表形式显示所有文件包括隐藏文件 ls -lt:按时间倒序查看文件 ls -R:递归方式…