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语言中,如果需要用的整数大于int类型的最大值了怎么办? 我们知道int能表示的最大数是2147483647,最小的数是-2147483648,为什么? 因为字32位系统中,寄存器是32位的&#…...
生成树协议 STP(spanning-tree protocol)
一、STP作用 1、消除环路:通过阻断冗余链路来消除网络中可能存在的环路。 2、链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。 二、STP选举机制 1、目的:找到阻塞的端口 2、STP交换机的角色&am…...
【LeetCode】312.戳气球
题目 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i 1] 枚硬币。 这里的 i - 1 和 i 1 代表和…...
商业数据分析概论
🐳 我正在和鲸社区参加“商业数据分析训练营活动” https://www.heywhale.com/home/competition/6487de6649463ee38dbaf58b ,以下是我的学习笔记: 学习主题:波士顿房价数据快速查看 日期: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题目描述回溯算法贪心算法 总结 前置知识 参考前文 参考文章: LeetCode刷题笔记【23】…...
游戏出现卡顿有哪些因素
一、服务器CPU内存占用过大会导致卡顿,升级CPU内存或者优化自身程序占用都可以解决。 二、带宽跑满导致卡,可以升级带宽解决。 二、平常不卡,有大型的活动的时候会卡,这方面主要是服务器性能方面不够导致的,性能常说…...
学习Bootstrap 5的第八天
目录 加载器 彩色加载器 实例 闪烁加载器 实例 加载器大小 实例 加载器按钮 实例 分页 分页的基本结构 实例 活动状态 实例 禁用状态 实例 分页大小 实例 分页对齐 实例 面包屑(Breadcrumbs) 实例 加载器 彩色加载器 在 Bootstr…...
vue中自定义指令
什么是指令 在Vue.js中,指令是一种特殊的 token,用于在模板中以声明式方式将响应式数据绑定到 DOM 元素上,从而实现与 DOM 元素的交互和操作。指令以 “v-” 前缀开始,后跟指令的名称,例如 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文件中添加一个按钮或需要点击的元素,并绑定点击事件监听器2 <button bindtap"copyText">点击复制</button> 2 在对应的js文件中定义点击事件处理函数,并在函数中调用小程序的API进行复制操作, copyText(e){co…...
20230909java面经整理
1.java常用集合 ArrayList动态数组,动态调整大小,实现List接口 LinkedList双向链表,实现list和queue接口,适用于频繁插入和删除操作 HashSet无序,使用哈希表实现 TreeSet有序,使用红黑树实现 HashMap无序&…...
常用的css命名规则
一、命名规则说明: 1)、所有的命名最好都小写 2)、属性的值一定要用双引号(“”)括起来 3)、给图片加上alt标签 4)、尽量使用英文命名原则 5)、尽量不缩写,除非一看就明白的单词 二、相对网页外…...
【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 注解时,如果无法获取消费的 traceId 信息,可能是因为在处理 RabbitMQ 消息时,没有正确地将 traceId 传递到日志中。 为了将 traceId 传递到日志中,你可以利用 MDCÿ…...
初探Vue.js及Vue-Cli
一、使用vue框架的简单示例 我们本次的vue系列就使用webstorm来演示: 对于vue.js的安装我们直接使用script的cdn链接来实现 具体可以参考如下网址: https://www.bootcdn.cn/ 进入vue部分,可以筛选版本,我这里使用的是2.7.10版本的ÿ…...
大数据课程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 简单锁:1.2 公平锁:1.3 可重入锁:1.4 红锁:1.5 读写锁:1.6 信号量:1.7 闭锁: 2. Spring boot 集成Redisson 验证分布式锁3. 参考资料4. 源…...
卫星通话过后,卫星导航产业被彻底激活
华为新手机发布后,其主打的卫星通话功能备受热议。在卫星产业链发展的背后,下一个大产业在哪里让人颇为好奇。 目前,卫星导航颇被看好,或将引领下一个技术狂潮。它的特点是产业大、发展快、参与者多。继电动汽车、新能源和芯片产…...
【算法训练-链表 七】【排序】:链表排序、链表的奇偶重排、重排链表
废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【链表的排序】,使用【链表】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&am…...
LGB的两种写法
方法一 import lightgbm as lgb import pandas as pd from sklearn.model_selection import train_test_split, KFold from sklearn.metrics import accuracy_score# 读取训练集和测试集数据 train_data pd.read_csv(train.csv) test_data pd.read_csv(test.csv)# 分割特征和…...
【Unity的HDRP下ShaderGraph实现权重缩放全息投影_(内附源码)】
实现权重缩放全息投影 效果如下 效果如下 顶点位置偏移 链接: 提取码:1234...
透视俄乌网络战之二:Conti勒索软件集团(上)
透视俄乌网络战之一:数据擦除软件 Conti勒索软件集团(上) 1. Conti简介2. 组织架构3. 核心成员4. 招募途径5. 工作薪酬6. 未来计划参考 1. Conti简介 Conti于2019年首次被发现,现已成为网络世界中最危险的勒索软件之一࿰…...
【华为OD机试python】拔河比赛【2023 B卷|100分】
【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 公司最近准备进行拔河比赛,需要在全部员工中进行挑选。 选拔的规则如下: 按照身高优先、体重次优先的方式准备比赛阵容; 规定参赛的队伍派出10名选手。 请实现一个选拔队员的小程序。 输…...
05 CNN 猴子类别检测
一、数据集下载 kaggle数据集[10 monkey] 二、数据集准备 2.1 指定路径 from tensorflow import keras import tensorflow as tf import numpy as np import pandas as pd import matplotlib.pyplot as plttrain_dir /newdisk/darren_pty/CNN/ten_monkey/training/ valid_d…...
【C#】关于Array.Copy 和 GC
关于Array.Copy 和 GC //一个简单的 数组copy 什么情况下会触发GC呢[ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]public static void Copy(Array sourceArray,long sourceIndex,Array destinationArray,long destinationIndex,long length);当源和目…...
Vue前端框架08 Vue框架简介、VueAPI风格、模板语法、事件处理、数组变化侦测
目录 一、Vue框架1.1渐进式框架1.2 Vue的版本 二、VueAPI的风格三、Vue开发准备工作四、模板语法文本插值属性绑定条件渲染列表渲染key管理状态 四、事件处理定义事件事件参数事件修饰符 五、数组变化侦测 一、Vue框架 渐进式JavaScript框架,易学易用,性…...
WebStorm使用PlantUML
虽然 WebStorm 没有官方的 PlantUML 插件,但我们可以使用第三方插件 PlantUML Integration 来实现在 WebStorm 中使用 PlantUML。 以下是使用 PlantUML Integration 插件,在 WebStorm 中设计一个 Vue 模块的步骤: 安装 PlantUML Integratio…...
Python做批处理,给安卓设备安装应用和传输图片
场景:几台新安卓平板过来了,需要安4个应用并复制4张图片。手工操作其实也未尝不可,但是能自动化起来,岂不是美哉。 python调用系统命令,我选用了os.system,最简单粗暴,也能有回显,就…...
如何获取springboot中所有的bean
代码 Component public class TestS {Autowiredprivate Map<String, Object> allBean Maps.newConcurrentMap();public void testA(){System.out.println("测试下");}}这段代码是一个使用 Spring Framework 的依赖注入(DI)功能的示例。…...
网站的产品中心怎么做/seo实战
enq: TX - row lock contention事件是锁等待事件,今天我要做一个例子来模拟这类事件的出现。 测试环境如下: 现在我们进行测试,用1个会话session插入数据,不提交。让其他会话session进行相关修改 --SESSION 1(持有者&a…...
安卓aso关键词优化/seo推广优化培训
听说一个IP可以绑定多个域名,那么服务端是怎么实现的? 如果我以IP访问服务器,服务器怎么才能知道我想上的是哪个网站?全球所有网站共同使用一个IP,理论上都是可以的,只要每个网站有自己独一无二的域名。因为IP和网站没…...
做赌球网站代理怎么样/如何做好seo优化
我正在使用这个api ..其函数调用如下:g.vertices.index.lookup(identifier"value")现在请注意,idenitifier是一个我尚未定义但由api解析的变量,value是一个字符串.db client.test_database等于db client["test_database"]test_database在第一…...
宁波市住房和城乡建设委员会网站/产品推广思路
点击上方蓝字关注星标★不迷路本文作者:宋振中本文编辑:小叮大家好,我还是那个少年——喜欢 Office 十年却仍处在「热恋期」的振中~相信不少朋友在工作中经常遇到双层饼图,但是能熟练用 Excel 画出双层饼图的,好像并不…...
合肥浦发建设集团网站/快手作品免费推广软件
1、margin边距 是页面与浏览器之间的边距 一般网站的页面左边距和上边距都设置为0, 这样看起来页面不会有太多的空白。 转载于:https://www.cnblogs.com/silent-190/p/9039808.html...
上海营销型网站建设团队/郑州网站优化公司
ASCII码转换为int:ord(A) 65int转为ASCII码:chr(65) A题目内容:实现一个凯撒密码的变种算法,对输入字符串进行加解密处理把字母a-z分别循环对应为相距13个位置的字母n-m,即原文字母:a b c d e f g h i j k …...