首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C语言】关于整型提升、截断、打印数据的结果

一:先介绍一下相关概念 1.整型提升: (1)应用场景 数字有整数和小数,对应c语言中的整型和浮点型,由此可见当整数发生运算时,那其实就意味着整形运算,我们还知道如果小于整形的类型发生整型运算时,那就要进行整型提升...0,负数高位补1,换句话说就是,有符号数高位补符号位即可 明白什么时候整型提升后,我们再来讲解发生截断 2.发生截断: 其实就是一个整形数据存储到小于整型的类型时,由于存放字节数有限,只能存放这个整型数据的一部分...,这其实就是发生了截断 像上面的这种赋值方式就是要发生截断了 二:话不多说,直接上手操作一下就会了 200是一个整型数字,(32位下,方便表示)二进制表示形式为 00000000000000000000000011001000...截断后存到a中的是11001000、 100也是一个整型数字,(32位下,方便表示)二进制表示形式为 00000000000000000000000001100100截断后存到a中的是01100100...a+b就是两个整数运算,那就是整形运算,要发生整型提升后,再进行相加,相加后的结果为00000000000000000000000100101100 存储到c时,由于c是char型,又要发生截断,截断后存储到

2.2K30

#整型与浮点型的储存问题#

一·整型如何储存 首先我们会输入整型变量的时候,计算机会进行存储,然而它是怎么储存的呢?首先我们要明白我们数字输入的是原码,而计算机在内存中储存的是补码。...这便引入了下面我们要讲的大小端问题。欲知后事如何,请听下回分解。...二·整型大小端储存 先简单介绍一下大小端,它其实是放置数据的两种不同的方式罢了:每个整型数据都会有尾字节,如果在大端机器它会把尾字节处数据放在高地址处,如果是小端的话,他就会放在低地址处;下面展示一个图...00100000000000000000000,那么当我们用浮点型指针去打印那么就会是9.000000; 但是我们浮点型存进去的结果用整型去打印 整型访问时就会变成每个字节分开的:01000001...无论身处何种地位,我始终坚守"不耻下问"的原则。对于我而言,学问无分高低,知识无分贵贱。即使面对一个看似微不足道的问题,我也会虚心请教,因为我相信每个问题都蕴含着学习的机会。

5810
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C语言】基础数据类型的隐式转换、截断和整型提升(超详细)

    2.1 整型家族的截断 整型家族包括:char、short、int、long 、long long… 整型截断的规则:直接将高位数据丢弃,将剩余的低位的数据直接赋值到变量中。...其中,b是字符类型,常数-128是整型,这里就会发生截断 //-128的原码:10000000 00000000 00000000 10000000 //-128的反码:11111111 11111111...2.3 混合截断 规则:当一个浮点数类型的变量赋值给整数类型的变量时,会直接舍弃掉小数点部分把整数部分直接赋值给整型变量。 3. 整型提升 整型提升仅发生在整型家族里面。...10000000(整型提升) return 0; } 好了,到这里不同数据类型的进行表达式运算时竟然有如此多的细节,不过只要我们牢记这些现象发生的条件和对应的规则,那就不成问题了。...截断 当高字节的数据类型给低字节的数据类型赋值时 1.对于整型之间,直接将高位数据舍弃,剩余的数据赋值给变量;2.对于整型和浮点型的情况,直接将小数点后面的值舍弃,并将整数部分直接赋值给整型变量 。

    36210

    关于 xargs 参数被截断,tar 文件被覆盖的问题

    问题: 目录下共 2W+ 个小文件: $ find ....,这个参数是 ARG_MAX ,在正式环境上是 131072 (bytes) : $ getconf ARG_MAX   131072       凡是超过 131072 bytes 长度的参数都会被截断...所以我猜想,第二批参数列表产生的压缩包把第一批参数列表产生的压缩包覆盖掉了,第三批又把第二批覆盖掉了。。。实际上只有最后一次传进来的参数被打进了压缩包中。.../$BID.tar # 用xargs追加进去所有的文件,这次不用怕被截断了~ find . -name "${BID}_*" | xargs tar uf ..../$BID.tar.gz "$BID"_* fi 其实 xargs 这些用法的区别有些类似于 http 协议中 " 幂等 " 的概念, tar cf 这种命令是不 " 幂等 " 的, rm 这类的命令则是

    1.7K60

    记64位地址截断引发的挂死问题

    当然这些都不是本文的重点,本文仅介绍遇到的这个典型的问题。 问题描述 由于项目本身涉及的系统比较复杂,因此简单分享一下定位过程,下一节将通过简洁的示例程序来说明。...但是跟踪到动态库接口内部,发现返回的结果是正常的8字节地址值,排除定时器接口的问题 最终可以确定,在调用动态库接口时,虽然返回的是8字节地址,但是赋给外部变量时,就被截断了 换项目中的另外一个进程调试demo...8字节的值 main函数中的p的地址值为4字节 返回值被截断了 也就是和我们预期的结果完全不一样。...这个问题很明显,因为申请内存得到的地址值与释放内存的地址不是同一个,因此导致coredump(coredump的查看可参考《linux常用命令-开发调试篇》中的gdb部分)。 为什么地址值被截断?...而正因如此,就有了第二个警告,提示从整型转换成指针。 到此其实也就真相大白了。既然testFun的返回值被编译器默认为int,返回一个8字节的指针类型,而返回值却是int,自然就会被截断了。

    89420

    技术笔记:Indy的TIdSMTP改造,解决发送Html和主题截断问题

    1、邮件包含TIdText和TIdAttachment时会出现TIdText无法发送的问题 这个问题是因为Indy代码的bug导致的,也很奇怪这种Bug是因为没有经过测试呢?还是测试没有覆盖到?...问题出在SendBody方法上,这个在之前一篇中提到过《技术笔记:Indy控件发送邮件》 当时是解决“发送Html”的问题才使用到了TIdText这个组件,因为基类TIdMessageClient中的SendBody...2、邮件主题Subject超过一定的字符量就会出现截断 另外提求新需求要求主题增加一些内容,以便收件人可以一眼看出邮件是啥意思。挺简单的事情吧,结果发生了难过的事情。...收到的邮件主题是截断的,而且后面的内容解析错误。心想这是个什么鬼。...可见Indy确实主要照顾了英文的使用,像中文这种复杂的点语言估计都没好好测试吧,另外以前只听说Indy问题多但一直没感觉到,现在接触多一些果然有所体会啊。

    79460

    MySQL5.7中使用GROUP_CONCAT数据被截断的问题

    前天在生产环境中遇到一个问题:使用GROUP_CONCAT函数select出来的数据被截断了,最长长度不超过1024字节,开始还以为是navicat客户端自身对字段长度做了限制的问题。...后面故意重新INSERT了一个字段长度超1024字节的数据,但是navicat能完整展示出来,所以就排除了navicat的问题。...网上搜了下GROUP_CONCAT数据截断的问题,答案都指向了group_concat_max_len这个参数,它的默认值正好是1024。...2 解决问题 只要调整group_concat_max_len到最大值就行了,官方在MySQL5.7的手册中给出了如下定义: 由于BZ的测试虚拟机MySQL5.7.19是64位的,所以可以通过下面这两种方法配置好...(Fremark)) FROM account;结果的对比,可以发现已经成功解决了MySQL5.7中使用GROUP_CONCAT数据被截断的问题。

    57910

    AVL树:解决BST可能导致的长链问题

    BST存在的问题 BST的性质有可能导致所有的数据都插在了同一个链路上,导致没有一个节点有左子树,都是右子树,像是一个链表,失去了它的lgn的性质 AVL的性质 AVL是作者的名字缩写 每个左子树的高度与右子树的高度差值不大于...1 如果是AVL+BST需要只需要在BST的基础上加上AVL的性质,AVL本身需要去维护高度 image.png 一个AVL树,除去根节点这层,至少包含的左右两部分为:一边是高度为h-1,另一边是高度为...h-2 image.png AVL树+BST的插入 插入过程中,一旦出现层级超过1的情况,需要进行旋转,而对应出现2层的高度差别,只会出现如下4种 情况1: 1 \ 2 \.../ \ 1 3 复制代码 情况4 3 / 1 \ 2 对1进行左旋 3 / 2 / 1 再右旋 2 / \ 1 3 复制代码 保持平衡的算法为..._left_roate(node) node = node.parent 复制代码 左旋 def _left_roate(self,node): '''当前节点的右节点高度-左节点高度>=2 从上到下

    46220

    修改Apache的超时设置,解决长连接请求超时问题

    某日,组内后台开发找到我,问我们的 WEB 服务器超时设置是多少。他反馈的问题是,有一个 VLAN 切换任务 cgi 接口经常返回 504 网关超时错误,要我分析解决下。...我问了一下,得知这个请求遇到网络设备对象较多的时候,需要小半个小时才能完成,也就是要用到长连接才行。...老规矩,从开发那拿到接口地址,得到接入层服务器 IP,是一台 Haproxy 代理,看了一下 Haproxy 的超时设置: # 设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy...该参数向后兼容 srvtimeout 3600 各种 1 小时超时,所以排除 Haproxy 的影响,继续往下看。 Haproxy 代理的是 2 台 Apache,也就是部署了 cgi 接口的服务器。...然后再编辑 /usr/local/apache2/conf/extra/httpd-default.conf 文件,将 Timeout 的值修改为符合生产环境要求的 1800 秒,最后执行 Apache

    15.7K90

    【YashanDB 知识库】php 查询超过 256 长度字符串,数据被截断的问题

    问题现象如下图,php 使用 odbc 数据源,查询表数据,mysql 可以显示出来,yashan 显示数据被截断。...问题的风险及影响1、php 用 pdo_odbc 查询超过 256 长度的数据,数据被截断。2、isql 查询超过 300 长度的数据,显示不出来。...问题影响的版本23.2.4.14 及之前版本问题发生原因php 查询超过 256 字节数据,显示被截断:yashandb 的 odbc 驱动接口 SQLGetData 现在只支持单次查询,不支持多次取数据的操作...规避后,php 能正常查询出来:问题分析和处理过程1、查看 odbc.log,发现 php 取数据的 buffer 长度是 256,isql 的 buffer 长度是 300。...>复制代码3、isql 取数据逻辑可以看到代码最大长度默认是 300相关问题单PHP 使用 ODBC 取长度超过 255 的字符串出现截断或乱码的异常

    6710

    C语言的整型溢出问题 int、long、long long取值范围 最大最小值「建议收藏」

    溢出和取值范围 C语言的整型溢出问题 整数溢出 int、long int 、long long int 占用字节疑问 《C和指针》中写过:long与int:标准只规定long不小于int的长度,int...不小于short的长度。...double与int类型的存储机制不同,long int的8个字节全部都是数据位,而double是以尾数,底数,指数的形式表示的,类似科学计数法,因此double比int能表示的数据范围更广。...FLT_DIG        float 类型的最少有效数字位数 FLT_MIN_10_EXP   带有全部有效数的float类型的负指数的最小值(以10为底) FLT_MAX_10_EXP   ...原码, 反码, 补码 详解 该如何选用类型 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/136510.html原文链接:https://javaforall.cn

    1.8K20

    C语言:数据在内存中的存储形式

    C语言:进制的转换以及原码、反码、补码 我们以整型在内存中的存储形式为基础,探究后面的内容:整型提升与截断、算数转换、大小端字节序和字节序判断、强制类型转换的原理、浮点数在内存中的存储!!...二、整型提升与截断 C语⾔中,整型算术运算总是⾄少以缺省(缺省就是默认的意思)整型类型的精度来进⾏的。...当长字节的数据类型用短字节的数据类型进行存储时,会发生截断,截断就是通过简单地将高位丢弃,保存低位来实现 补充一条知识: C语言规定,char类型默认是否带有正负号,由当前的系统决定,也就是说char类型可能等价于...我们会发现,当char类型进行运算时,会进行整型提升,而当计算的结果保存在char类型时,会对整型提升后的结果进行截断,只保留低位。...浮点数的存储可能有什么问题??

    25820

    【Linux】<信号量>解决<水果放取问题>【小拓展】——(设置整型turn,控制放的先后顺序)

    正文回顾:巧妙运用<信号量>解决<水果放取问题>(思维导图&代码演示&思路解析) 要求: 一个盘子里只能放一个水果,爸爸往里面放苹果妈妈往里面放橘子,儿子专等吃橘子,女儿专等吃苹果; 只要盘子空,...爸爸或妈妈就可以往里面放水果; 仅当盘子里有自己需要的水果时,儿子或女儿才可以取出吃; 解析: 设置三个信号量,plate=1,优先执行,面向父母端;两个信号量appleReady,orangeReady...<信号量>解决<水果放取问题>【小拓展】——(设置整型turn,控制放的先后顺序) 要求: 一个盘子里只能放一个水果,爸爸往里面放苹果妈妈往里面放橘子,儿子专等吃橘子,女儿专等吃苹果; 只要盘子空...,爸爸或妈妈就可以往里面放水果; 仅当盘子里有自己需要的水果时,儿子或女儿才可以取出吃; 拓展要求: 如何设计,使得必须父亲先放水果,以后父母交替放水果 解析: 基本原理在上面【二....正文回顾】中,这里侧重说明 【设置整型turn,控制放的先后顺序】 设置turn: 0表示父亲优先放,1表示母亲优先放 基于【二.

    6810

    一次百万长连接压测 Nginx OOM 的问题排查分析

    在最近的一次百万长连接压测中,32C 128G 的四台 Nginx 频繁出现 OOM,出现问题时的内存监控如下所示。 排查的过程记录如下。...现象描述 这是一个 websocket 百万长连接收发消息的压测环境,客户端 jmeter 用了上百台机器,经过四台 Nginx 到后端服务,简化后的部署结构如下图所示。...Nginx 的 buffering 机制设计的初衷确实是为了解决收发两端速度不一致问题的,没有 buffering 的情况下,数据会直接从后端服务转发到客户端,如果客户端的接收速度足够快,buffering...其实这是一个非阻塞编程中的典型问题,接收数据不会阻塞发送数据,发送数据不会阻塞接收数据。如果 Nginx 的两端收发数据速度不对等,缓冲区设置得又过大,就会出问题了。...除此之外,在这次压测过程中还发现了 worker_connections 参数设置不合理导致 Nginx 启动完就占了 14G 内存等问题,这些问题在没有海量连接的情况下是比较难发现的。

    54010

    【C语言指南】printf()函数详解

    取值和含义如下: width(最小宽度) 字符名称 描述 digit(n) 数字 字段宽度的最小值,如果输出的字段长度小于该数,结果会用前导空格填充;如果输出的字段长度大于该数,结果使用更宽的字段,不会截断输出...如果写入的值短于该数,结果会用前导零来填充。如果写入的值长于该数,结果不会被截断。...,取值和含义如下: length(类型长度) 描述 h 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X) l 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d...(可能会丢失数据) printf("%hd\n", 1234);//解释为短整型输出 printf("%ld\n", 12345678);//解释为长整型输出 return 0; } 4.其他问题...4.1 转义字符 关于转义字符的问题请查看这篇博客,本文不再重复介绍 转义字符使用详解【C语言】-CSDN博客 4.2 printf语句输出过长时的解决办法 当一条printf语句中的输出内容过长时

    27400

    踩坑:一次年轻代GC长暂停问题的解决与思考

    +age n的总大小,累加规则如下图所示 当total最大的分组的total值超过了survivor/2时,就会更新晋升阈值 在第二次年轻代GC“长暂停年轻代GC日志”中,由于新的晋升年龄阈值为1,所以那些经历了一次...GC并存活并且现在仍然可达(reachable)的对象们就会发生晋升了 由于此次GC发生了363M的对象晋升,所以导致了长暂停 思考 JVM中这个“动态对象年龄判定”真的是合理的吗?...个人认为机制是好的,可以更好的适应不同程序的内存状况,但不是任何场景都适合,比如在本文中这个刚启动不就GC的场景下就会有问题 因为在程序刚启动时,大多数对象年龄都是0或者1,很容易出现年龄为1的大量存活对象...size而导致晋升年龄阈值的更新了,从而也就不会有提前/错误晋升而导致的GC长暂停问题 survivor不可以直接指定大小,不过可以通过-XX:SurvivorRatio这种调节比例的方式来调节survivor...所需处理的逻辑会更复杂一些,比如指针的更新等操作,更耗时也是可以理解的, 本地代码模拟 这里也附上一段可以在本地模拟问题的代码,Oracle JDK8下可直接运行测试 //jdk8.。

    2K10
    领券