当前位置: 首页 > news >正文

C语言学习:8、深入数据类型

数据超过类型规定的大小怎么办

C语言中,如果需要用的整数大于int类型的最大值了怎么办?

我们知道int能表示的最大数是2147483647,最小的数是-2147483648,为什么?

因为字32位系统中,寄存器是32位的,寄存器中最高位表示符号位,0表示整数,1表示负数;

所以32位系统中int的最大值可以表示为0111 1111 1111 1111 1111 1111 1111 1111,这个二进制的数就是2147483647

程序示例1:

#include <stdio.h>int main()
{int i = 2147483647;short s = 32767;printf("i = %d\n",i);printf("s = %d\n", s);i = i + 1;s = s + 1;printf("i = %d\n", i);printf("s = %d\n", s);return 0;
}

输出结果:

i = 2147483647
s = 32767
i = -2147483648
s = -32768

结果是不是很奇怪,最大的数加1之后怎么都有个负号了,不可能,绝对不可能。

但是事实摆在面前了,什么原因?就是因为数据在内存中是怎么存储的问题了,前面说了,数据在内存中存储,默认最高位是符号位,默认存的数据就是有符号的;还有一个原因,正整数在内存中存的是源码,负整数在内存中存的是补码。数据到头之后再加1,你的数据极性就发生了翻转。

也就是说我们写的int ,编译器默认的是signed int;

signed int的数据范围是:-2147483648 ---- 2147483647

我们也可以主动声明数据类型,unsigned int无符号整型,内存里面的32位全部是数据,没有符号位了,那数据的范围就是:0 -- 4294967295

同理也就有了unsigned short、unsigned char。

收到启发,把

程序示例1的代码修改一下,加个unsigned进去

程序示例2:

#include <stdio.h>int main()
{unsigned int i = 2147483647; //无符号intunsigned short s = 32767; //无符号shortprintf("i = %d\n",i);printf("s = %d\n", s);i = i + 1;s = s + 1;printf("i = %d\n", i);printf("s = %d\n", s);return 0;
}

输出的结果感觉还是错的,

i = 2147483647
s = 32767
i = -2147483648
s = 32768

而且是short的数据是对的,int的数据是错的,怎么回事?

这是因为打印出了问题,我们打印的格式是%d,默认还是有符号的整型,那为什么short类型的数据是对的呢,因为short数据太小了,内存里面存数据是32位的,short类型数据还没有溢出。

程序需要进一步修改,打印数据类型改为%u,就是输出无符号整型了,

程序示例3:

#include <stdio.h>int main()
{unsigned int i = 2147483647;unsigned short s = 32767;printf("i = %d\n",i);printf("s = %d\n", s);i = i + 1;s = s + 1;printf("i = %u\n", i); //打印数据类型是%uprintf("s = %d\n", s);return 0;
}

输出的结果终于正常了

i = 2147483647
s = 32767
i = 2147483648
s = 32768

在单片机开发中,无符号的整型用得比较多。

数据在内存中的表现

char   占一个字节  数据范围   -128--127

short  占两个字节  数据范围  -32768--32767

int      占4个字节   数据范围   -2147483648 ---- 2147483647

要想知道变量或者类型所占用的内存大小,也就是占用几个字节,可以使用sizeof函数来查询,用法如下:

sizeof(变量);
sizeof(类型);
sizeof 变量;

程序示例4:

#include <stdio.h>int main()
{int s = sizeof(short);//short 类型占2个字节,s=2;int n = sizeof s;printf("s = %d\n", s); //s的值是2,类型是intprintf("n = %d\n", n); //n的值是4,return 0;
}

输出结果:

s = 2
n = 4

把常见的类型所占内存的情况都可以打印出来看看

程序示例5:

#include <stdio.h>int main()
{printf("char类型变量占用 %d个字节\n", sizeof(char)); printf("short类型变量占用 %d个字节\n", sizeof(short));printf("int类型变量占用 %d个字节\n", sizeof(int));printf("float类型变量占用 %d个字节\n", sizeof(float));printf("double类型变量占用 %d个字节\n", sizeof(double));return 0;
}

输出结果:

char类型变量占用 1个字节
short类型变量占用 2个字节
int类型变量占用 4个字节
float类型变量占用 4个字节
double类型变量占用 8个字节

程序示例6:

#include <stdio.h>int main()
{printf("无符号char类型变量占用 %d个字节\n", sizeof(unsigned char)); printf("无符号short类型变量占用 %d个字节\n", sizeof(unsigned short));printf("无符号int类型变量占用 %d个字节\n", sizeof(unsigned int));return 0;
}

输出结果:

无符号char类型变量占用 1个字节
无符号short类型变量占用 2个字节
无符号int类型变量占用 4个字节

以上说明无符号整数与有符号整数所占的内存是一样的。

奇怪的数据类型

有short就有long,但是这个long在不同的编译器里面结果却是不一样的

long一般是占4个字节,但也可能占8个字节;

还用奇葩的类型,long long,也就是long long int的简写,占8个字节;

程序示例7:

#include <stdio.h>int main()
{printf("long类型变量占用 %d个字节\n", sizeof(long)); printf("long long类型变量占用 %d个字节\n", sizeof(long long));return 0;
}

输出结果:

long类型变量占用 4个字节
long long类型变量占用 8个字节

相关文章:

C语言学习:8、深入数据类型

数据超过类型规定的大小怎么办 C语言中&#xff0c;如果需要用的整数大于int类型的最大值了怎么办&#xff1f; 我们知道int能表示的最大数是2147483647&#xff0c;最小的数是-2147483648&#xff0c;为什么&#xff1f; 因为字32位系统中&#xff0c;寄存器是32位的&#…...

生成树协议 STP(spanning-tree protocol)

一、STP作用 1、消除环路&#xff1a;通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份&#xff1a;当活动路径发生故障时&#xff0c;激活备份链路&#xff0c;及时恢复网络连通性。 二、STP选举机制 1、目的&#xff1a;找到阻塞的端口 2、STP交换机的角色&am…...

【LeetCode】312.戳气球

题目 有 n 个气球&#xff0c;编号为0 到 n - 1&#xff0c;每个气球上都标有一个数字&#xff0c;这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&#xff0c;你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和…...

商业数据分析概论

&#x1f433; 我正在和鲸社区参加“商业数据分析训练营活动” https://www.heywhale.com/home/competition/6487de6649463ee38dbaf58b &#xff0c;以下是我的学习笔记&#xff1a; 学习主题&#xff1a;波士顿房价数据快速查看 日期&#xff1a;2023.9.4 关键概念/知识点&…...

Golang GUI框架

Golang GUI框架fyne fyne简介第一个fyne应用fyne应用程序和运行循环fyne更新GUI内容fyne窗口处理fyne解决中文乱码问题fyne应用打包fyne画布和画布对象fyne容器和布局fyne绘制和动画fyne盒子布局fyne网格grid布局fyne网格包裹布局fyne边框布局fyne表单布局fyne中心布局fyne ma…...

LeetCode刷题笔记【24】:贪心算法专题-2(买卖股票的最佳时机II、跳跃游戏、跳跃游戏II)

文章目录 前置知识122.买卖股票的最佳时机II题目描述贪心-直观写法贪心-优化代码更简洁 55. 跳跃游戏题目描述贪心-借助ability数组贪心-只用int far记录最远距离 45.跳跃游戏II题目描述回溯算法贪心算法 总结 前置知识 参考前文 参考文章&#xff1a; LeetCode刷题笔记【23】…...

游戏出现卡顿有哪些因素

一、服务器CPU内存占用过大会导致卡顿&#xff0c;升级CPU内存或者优化自身程序占用都可以解决。 二、带宽跑满导致卡&#xff0c;可以升级带宽解决。 二、平常不卡&#xff0c;有大型的活动的时候会卡&#xff0c;这方面主要是服务器性能方面不够导致的&#xff0c;性能常说…...

学习Bootstrap 5的第八天

目录 加载器 彩色加载器 实例 闪烁加载器 实例 加载器大小 实例 加载器按钮 实例 分页 分页的基本结构 实例 活动状态 实例 禁用状态 实例 分页大小 实例 分页对齐 实例 面包屑&#xff08;Breadcrumbs&#xff09; 实例 加载器 彩色加载器 在 Bootstr…...

vue中自定义指令

什么是指令 在Vue.js中&#xff0c;指令是一种特殊的 token&#xff0c;用于在模板中以声明式方式将响应式数据绑定到 DOM 元素上&#xff0c;从而实现与 DOM 元素的交互和操作。指令以 “v-” 前缀开始&#xff0c;后跟指令的名称&#xff0c;例如 v-model、v-bind 和 v-on。…...

Python:安装Flask web框架hello world

安装easy_install pip install distribute 安装pip easy_install pip 安装 virtualenv pip install virtualenv 激活Flask pip install Flask 创建web页面demo.py from flask import Flask app Flask(__name__)app.route(/) def hello_world():return Hello World! 2023if _…...

小程序点击复制功能制作

在wxml文件中添加一个按钮或需要点击的元素&#xff0c;并绑定点击事件监听器2 <button bindtap"copyText">点击复制</button> 2 在对应的js文件中定义点击事件处理函数&#xff0c;并在函数中调用小程序的API进行复制操作&#xff0c; copyText(e){co…...

20230909java面经整理

1.java常用集合 ArrayList动态数组&#xff0c;动态调整大小&#xff0c;实现List接口 LinkedList双向链表&#xff0c;实现list和queue接口&#xff0c;适用于频繁插入和删除操作 HashSet无序&#xff0c;使用哈希表实现 TreeSet有序&#xff0c;使用红黑树实现 HashMap无序&…...

常用的css命名规则

一、命名规则说明&#xff1a; 1&#xff09;、所有的命名最好都小写 2&#xff09;、属性的值一定要用双引号(“”)括起来 3&#xff09;、给图片加上alt标签 4&#xff09;、尽量使用英文命名原则 5&#xff09;、尽量不缩写&#xff0c;除非一看就明白的单词 二、相对网页外…...

【Linux编程Shell自动化脚本】03 shell四剑客(find、sed、grep、awk)

文章目录 一、find1. 常用expression2. 时间参数3. 其他选项参数3.1 查找深度3.2 执行命令 二、sed1. 常用命令选项2. 常用动作脚本命令2.1 s 替换2.2 已匹配字符串标记&2.3 在当前行前后插入文本 a\ 和 i\2.4 p 打印指定行2.5 匹配行的方式2.5.1 以数字形式指定行区间2.5.…...

java的springboot框架中使用logback日志框架使用RabbitHandler注解为什么获取不到消费的traceId信息?

当使用 Logback 日志框架和 RabbitMQ 的 RabbitHandler 注解时&#xff0c;如果无法获取消费的 traceId 信息&#xff0c;可能是因为在处理 RabbitMQ 消息时&#xff0c;没有正确地将 traceId 传递到日志中。 为了将 traceId 传递到日志中&#xff0c;你可以利用 MDC&#xff…...

初探Vue.js及Vue-Cli

一、使用vue框架的简单示例 我们本次的vue系列就使用webstorm来演示&#xff1a; 对于vue.js的安装我们直接使用script的cdn链接来实现 具体可以参考如下网址&#xff1a; https://www.bootcdn.cn/ 进入vue部分&#xff0c;可以筛选版本,我这里使用的是2.7.10版本的&#xff…...

大数据课程K21——Spark的SparkSQL基础语法

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 掌握Spark的SparkSQL通过方法来使用; ⚪ 掌握Spark的SparkSQL通过sql语句来调用; 一、SparkSQL基础语法——通过方法来使用 1. 查询 df.select("id","name").show()…...

【实践篇】Redis最强Java客户端(三)之Redisson 7种分布式锁使用指南

文章目录 0. 前言1. Redisson 7种分布式锁使用指南1.1 简单锁&#xff1a;1.2 公平锁&#xff1a;1.3 可重入锁&#xff1a;1.4 红锁&#xff1a;1.5 读写锁&#xff1a;1.6 信号量&#xff1a;1.7 闭锁&#xff1a; 2. Spring boot 集成Redisson 验证分布式锁3. 参考资料4. 源…...

卫星通话过后,卫星导航产业被彻底激活

华为新手机发布后&#xff0c;其主打的卫星通话功能备受热议。在卫星产业链发展的背后&#xff0c;下一个大产业在哪里让人颇为好奇。 目前&#xff0c;卫星导航颇被看好&#xff0c;或将引领下一个技术狂潮。它的特点是产业大、发展快、参与者多。继电动汽车、新能源和芯片产…...

【算法训练-链表 七】【排序】:链表排序、链表的奇偶重排、重排链表

废话不多说&#xff0c;喊一句号子鼓励自己&#xff1a;程序员永不失业&#xff0c;程序员走向架构&#xff01;本篇Blog的主题是【链表的排序】&#xff0c;使用【链表】这个基本的数据结构来实现&#xff0c;这个高频题的站点是&#xff1a;CodeTop&#xff0c;筛选条件为&am…...

WarcraftHelper终极指南:解锁魔兽争霸3现代硬件潜力的完整方案

WarcraftHelper终极指南&#xff1a;解锁魔兽争霸3现代硬件潜力的完整方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸3作为经典的即时战…...

Source Han Serif TTF:企业级中文排版战略选择与规模化部署指南

Source Han Serif TTF&#xff1a;企业级中文排版战略选择与规模化部署指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 思源宋体TTF作为Adobe与Google联合开发的开源中文字体解决方…...

QWen 3.5plus总结的总结基准测试结果的正确方法

原文地址&#xff1a;https://dl.acm.org/doi/epdf/10.1145/5666.5673 如何用统计撒谎&#xff1a;总结基准测试结果的正确方法 作者&#xff1a;PHILIP J. FLEMING 和 JOHN J. WALLACE 在文献中&#xff0c;性能结果经常使用性能比率的算术平均值来总结&#xff0c;在某些情况…...

全网薅羊毛新地图”:华莱士套餐实测13.9元起,连锁巨头麦当劳紧随其后!

近期&#xff0c;随着经济压力的加大&#xff0c;餐饮市场的竞争愈发激烈。在原本以低价策略闻名的麦当劳“穷鬼套餐”开始面临严峻挑战之际&#xff0c;一家曾被网友戏称为“穷鬼旗舰”的连锁快餐品牌——华莱士&#xff0c;悄然推出了更具性价比的“超值套餐”&#xff0c;在…...

【latex】探索LaTeX中加粗文本的多种方法及其在表格中的优化应用

1. LaTeX加粗文本的多种方法对比 第一次用LaTeX写论文时&#xff0c;我也以为\textbf{}是唯一的加粗方式。直到在表格里发现加粗后的文字会把单元格撑变形&#xff0c;才意识到LaTeX的文本修饰比想象中复杂得多。经过反复测试&#xff0c;我发现实际有5种常用加粗方法&#xf…...

GIL-Free Python并发仅剩最后1%难题:我们用37小时逆向分析PyO3内存模型,找到共享引用计数的终极解法

第一章&#xff1a;GIL-Free Python并发的终极挑战与破局意义Python 的全局解释器锁&#xff08;GIL&#xff09;长期被视为多核 CPU 利用率的“天花板”。它确保同一时刻仅有一个线程执行 Python 字节码&#xff0c;虽简化了内存管理与 C 扩展开发&#xff0c;却在 CPU 密集型…...

百度网盘真实下载地址高效提取与极速下载全攻略

百度网盘真实下载地址高效提取与极速下载全攻略 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在日常工作与学习中&#xff0c;我们经常会遇到百度网盘分享链接下载速度受限、…...

微信H5页面如何通过wx-open-launch-weapp标签跳转小程序?完整配置指南

微信H5跳转小程序全链路实战&#xff1a;从零配置wx-open-launch-weapp标签 在移动互联网生态中&#xff0c;微信H5与小程序的无缝跳转已成为提升用户体验的关键技术节点。许多开发者首次接触wx-open-launch-weapp标签时&#xff0c;往往会在业务域名验证、HTTPS部署等环节遭遇…...

百川2-13B-4bits模型微调指南:提升OpenClaw任务执行准确率

百川2-13B-4bits模型微调指南&#xff1a;提升OpenClaw任务执行准确率 1. 为什么需要微调百川模型&#xff1f; 去年夏天&#xff0c;当我第一次用OpenClaw自动化整理电脑上的数千份文档时&#xff0c;遇到了一个尴尬的问题——AI经常把技术文档和私人照片混在一起归类。这让…...

别再被Kettle的流程线骗了!详解‘阻塞数据直到步骤都完成’控件的正确用法与避坑指南

Kettle并行执行模型深度解析&#xff1a;如何正确使用"阻塞数据直到步骤都完成"控件 在ETL工具Kettle的使用过程中&#xff0c;许多开发者都会遇到一个令人困惑的现象&#xff1a;明明在转换中画了流程线&#xff0c;步骤却没有按照预期的顺序执行。这种认知偏差往往…...