(c语言进阶)数据存储——整形存储

news/2024/4/21 0:06:58/

 1.Release程序运行时会对Debug程序进行优化

例如将变量创建在数组之后,避免了数组越界引用时导致死循环的可能。

2.整形变量所占空间的大小 

3.构造类型

      数组的类型为去掉数组名之后的剩余部分

 4.指针类型

 5.空类型

 

 6.数值的不同表现形式

 

7.数据在内存中的两种存储方式 

计算机的选择哪种存储方式,取决于硬件设施 ,一般都采用小端存储

#include<stdio.h>    //判读大小端存储
int main()
{
    int a = 1;
//注:内存在存储时以二进制存储,一个字节占一个内存单元
//00000000 00000000 00000000 00000001——(int)a  二进制
//00 00 00 01——(int)a  十六进制
//00000001——(char)a  二进制
//01——(char)a  十六进制

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

8.有符号变量与无符号变量取值范围的计算方法

 

9.习题 

 (1)第一题

题目:计算输出结果

解析: 

答案:-1 ,-1,255

#include<stdio.h>
int main()
{
    char a = -1;
//10000000 00000000 00000000 00000001——int(-1) 原码
//11111111 11111111 11111111 11111110——int(-1) 反码
//11111111 11111111 11111111 11111111——int(-1) 补码
//11111101——char(-1)

    signed char b = -1;
//10000000 00000000 00000000 00000001——int(-1) 原码
//11111111 11111111 11111111 11111110——int(-1) 反码
//11111111 11111111 11111111 11111111——int(-1) 补码
//11111111——signed char(-1)

    unsigned char c = -1;
//10000000 00000000 00000000 00000001——int(-1) 原码
//11111111 11111111 11111111 11111110——int(-1) 反码
//11111111 11111111 11111111 11111111——int(-1) 补码
//11111111——unsigned char(-1)

    printf("a=%d,b=%d,c=%d",a,b,c);
//整形输出需要整形提升
//char (-1)提升后:
//11111111 11111111 11111111 11111111——int补码
//11111111 11111111 11111111 11111110——int 反码
//10000000 00000000 00000000 00000001——int 原码 =(-1)

//signed char (-1)提升后:
//11111111 11111111 11111111 11111111——int 补码
//11111111 11111111 11111111 11111110——int 反码
//10000000 00000000 00000000 00000001——int 原码 =(-1)

//unsigned char (-1)提升后
//00000000 00000000 00000000 11111111——int 补码=原码=255

    return 0;
}

(2)第二题 

 题目: 计算输出结果

解析:

答案: 4,294,967,168

#include<stdio.h>
int main()
{
    char a = -128;
//10000000 00000000 00000000 10000000——int (-128) 原码
//11111111 11111111 11111111 01111111——int (-128) 反码
//11111111 11111111 11111111 10000000——int (-128) 补码
//10000000——char (-128)

    printf("%u\n",a);
//整形提升后:
//11111111 11111111 11111111 10000000——unsigned int 补码=4,294,967,168
    
return 0;
}

 (3) 第三题

题目: 计算输出结果

 

解析: 

 答案:-10

#include<stdio.h>
int main()
{
    int i = -20;
//10000000 00000000 00000000 00010100——int(-20) 原码
//11111111 11111111 11111111 11101011——int(-20) 反码
//11111111 11111111 11111111 11101100——int(-20) 补码

    unsigned int j = 10;
//00000000 00000000 00000000 00001010——unsigned int (10) 原码=补码
    printf("%d\n",i+j);
//有符号变量与无符号变量进行算数运算时,需要进行类型转换
//10000000 00000000 00000000 00010100——unsigned int (-20) 提升后
//00000000 00000000 00000000 00001010——unsigned int (10) 原码=补码
//10000000 00000000 00000000 00001010——unsigned int  (-20)-(10)

//以整形输出时,无符号整形需类型转换
//10000000 00000000 00000000 00001010——int (-20)-(10)=(-10)

    return 0;
}

(4)第四题

 题目:计算输出结果

解析: 

答案:当i=0时,执行i--后变为一个极大值,死循环

#include<stdio.h>
int main()
{
    unsigned int i;
    for (i = 9; i >= 0; i--)
    {
        printf("%u\n",i);
    }
//当i=0时,执行i--
//00000000 00000000 00000000 00000000——int (0)
//00000000 00000000 00000000 00000000——unsigned int (0) 类型转换后

//10000000 00000000 00000000 00000001——int (-1) 原码
//11111111 11111111 11111111 11111110——int (-1) 反码
//11111111 11111111 11111111 11111111——int (-1) 补码
//11111111 11111111 11111111 11111111——unsigned int (-1) 类型转换后 =4,294,967,295

    return 0;
}

 (5)第五题

题目:计算输出结果

解析: 

答案:255

#include<stdio.h>
#include<string.h>
int main()
{
    char a[1000];
//char的取值范围-128~127
    int i = 0;
    for (i = 0; i < 1000; i++)
    {
        a[i] = -1 - i;        
    }
//故无论怎么循环,a[i]的取值范围都为a[-128]~a[127]
    printf("%d",strlen(a));
//128+127=255
//strlen()函数的返回值为unsigned int类型

    return 0;
}

 

 (6)第六题

题目: 计算循环次数

解析: 

答案:死循环

#include<stdio.h>
unsigned char i = 0;
int main()
{
    for (i = 0; i <=255; i++)
    {
        printf("Hello world\n");
    }
//当i=255时,i++后
//11111111——unsigned char (255)
//00000000——unsigned char (255)+(1)=0
//........

    return 0;
}

(7)第七题 

题目: 

解析: 

答案:>

#include<stdio.h>
#include<string.h>
int main()
{
//strlen()函数返回值类型为unsigned int
//00000000 00000000 00000000 00000011——unsigned int (3)
//00000000 00000000 00000000 00000110——unsigned int (6)
//00000000 00000000 00000000 00000011——unsigned int (6)-(3)=3

    if (strlen("abc") - strlen("abcdef") >= 0)
    {
        printf(">\n");
    }
    else
    {
        printf("<\n");
    }
    return 0;
}


http://www.ppmy.cn/news/1136664.html

相关文章

SimpleDateFormat非线程安全及解决方法

【RAEDME】 SimpleDateFormat非线程安全&#xff0c;即在多线程环境下解析字符串为日期对象&#xff0c;或格式化日期为字符串时&#xff0c;会抛出异常&#xff1b;当然&#xff0c;这是一个老生常谈的问题&#xff1b; 本文参考了已有 SimpleDateFormat的分析文章&#xff…

Android12之H264、H265、H266视频编码标准总结(四十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

LCR 120.寻找文件副本

​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 120. 寻找文件副本 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 使用哈希集合判断是否有元素重复出现即可。 解题代码&#xff1a; class Solution {public int findRepeatDocument(…

抖音小店怎么开通?都需要什么东西?这些你一定要知道!

我是电商珠珠 抖音小店怎么开通&#xff0c;都需要什么东西/条件&#xff1f; 我将这些详细的给大家罗列了出来&#xff0c;这些你一定要知道&#xff01; 抖音小店需要准备什么东西&#xff1f; 1、营业执照 个体工营业执照与企业工的权重一样&#xff0c;所以对于新手而…

网工方向基本常识(持续更新)

1. 设备分为带内管理和带外管理。 带内管理通过业务口管理设备&#xff0c;带外管理通过管理口管理设备。 接口类型一般设备都可以自定义接口类型。 一般而言带外管理使用私有地址管理&#xff0c;最多的就是192.168.0.1 。 连接该管理口后更改自己电脑的网卡地址为管理网段的…

阿里云ECS和轻量服务器有什么区别?

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

【多线程编程】创建线程的几种方式 面试题

创建线程的几种方法 继承Thread类&#xff0c;重写run方法。实现Runnable接口&#xff0c;重写run方法 。Thread匿名内部类&#xff0c;重写run方法。Runnable匿名内部类&#xff0c;重写run方法。Threadlambda表达式&#xff0c;不用重写。 1.继承Thread类&#xff0c;重写ru…

OpenGLES:绘制一个混色旋转的3D圆锥

效果展示&#xff1a; 本篇博文总共会实现两种混色旋转的3D圆锥&#xff1a; 一.圆锥解析 1.1 对圆锥的拆解 上一篇博文讲解了绘制圆柱体&#xff0c;这一篇讲解绘制一个彩色旋转的圆锥 在绘制圆柱体时提到过&#xff0c;关键点是先将圆柱进行拆解&#xff0c;便于创建出顶…

【Linux】Linux常用命令—文件管理(上)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

stm32之智能小车总结

作为学习stm32f103c8t6阶段的收官项目&#xff0c;这里做下总结&#xff0c;源码放在了最后。 一、功能描述 1、跟随功能2、循迹功能3、避障功能4、测速功能5、温湿度常显6、oled显示7、语音或蓝牙进行功能切换8、手势功能 二、主要代码解析 2.1、main main函数主要展示whi…

提高应用程序测试覆盖率的 4 个步骤

什么是测试覆盖率以及为什么它很重要&#xff1f; 简而言之&#xff0c;测试覆盖率衡量您测试了多少应用程序。这不仅仅与您执行了多少测试有关。它还与您查看的真实设备、浏览器和操作系统版本有关&#xff01; 您测试的可能设备和操作系统组合越多&#xff0c;测试覆盖的代…

路径问题【动态规划】

一、不同路径 class Solution { public:int uniquePaths(int m, int n) {vector<vector<int>> dp(m1,vector<int>(n1));dp[0][1] 1;for(int i 1;i < m;i){for(int j 1;j < n;j){dp[i][j] dp[i-1][j]dp[i][j-1];}}return dp[m][n];} }; 二、不同路…

(ubuntu)Docker 安装linux 详情过程

文章目录 前言Docker 安装linux第一步&#xff1a;使用dokcker 拉取镜像&#xff1a;第二步&#xff1a;创建本地目录&#xff08;用于挂载&#xff09;第三步&#xff1a;&#xff08;上传配置文件&#xff09;修改配置文件第四步&#xff1a;创建docker容器第五步: 测试本地连…

文举论金:黄金原油全面走势分析策略独家指导

市场没有绝对&#xff0c;涨跌没有定势&#xff0c;所以&#xff0c;对市场行情的涨跌平衡判断就是你的制胜法宝。欲望&#xff01;有句意大利谚语&#xff1a;让金钱成为我们忠心耿耿的仆人&#xff0c;否则&#xff0c;它就会成为一个专横跋扈的主人。空头&#xff0c;多头都…

【Typescript】面向对象(上篇),包含类,构造函数,继承,super,抽象类

假期第七篇&#xff0c;对于基础的知识点&#xff0c;我感觉自己还是很薄弱的。 趁着假期&#xff0c;再去复习一遍 面向对象&#xff1a;程序中所有的操作都需要通过对象来完成 计算机程序的本质就是对现实事物的抽象&#xff0c;抽象的反义词是具体。比如照片是对一个具体的…

LCR 101.分割等和子集

​​题目来源&#xff1a; leetcode题目&#xff0c;网址&#xff1a;LCR 101. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 解题思路&#xff1a; 将数组分为等和的两部分等价于数组是否中存在部分元素和为数组总和的一半。 首先&#xff0c;若数组长度为 1 或数组…

大模型部署手记(2)baichuan2+Windows GPU

1.简介 组织机构&#xff1a;百川智能&#xff08;前搜狗CEO王小川创立&#xff09; 代码仓&#xff1a;GitHub - baichuan-inc/Baichuan2: A series of large language models developed by Baichuan Intelligent Technology 模型&#xff1a;baichuan-inc/Baichuan2-7B-Ch…

【C语言】八大排序算法

文章目录 一、冒泡排序1、定义2、思想及图解3、代码 二、快速排序1、hoare版本2、挖坑法3、前后指针法4、非递归快排5、快速排序优化1&#xff09;三数取中选key值2&#xff09;小区间优化 三、直接插入排序1、定义2、代码 四、希尔排序1、定义2、图解3、代码 五、选择排序1、排…

QT4.8.7安装详细教程

QT4.8.7安装详细教程&#xff08;MinGW 4.8.2和QTCreator4.2.0&#xff09; 1.下载及安装2.配置环境 此文是在下方链接博文的基础上&#xff0c;按自己的理解整理的https://blog.csdn.net/xiaowanzi199009/article/details/104119265 1.下载及安装 这三个文件&#xff0c;顺序是…

深入解析CSS选择器:更多细节和应用

深入解析CSS选择器&#xff1a;更多细节和应用 CSS选择器不仅是前端开发的基础&#xff0c;更是成为一个高效开发者不可或缺的工具。选择器的高级用法能让你用更少的代码做更多的事情&#xff0c;而深入理解它们的工作原理也能让你更准确地控制样式。本文将进一步深入地探讨CS…