计算char,short,int,long类型变量的取值范围

     源自《The C Programming Language》P28 pr2-1:

     编写一个程序以确定分别由signed及unsigned限定的char,short,int,long类型变量的取值范围。

     参考代码:

     

ContractedBlock.gifExpandedBlockStart.gifmain.c
1 #include <stdio.h>
2 #include <limits.h>
3 #include <float.h>
4
5 int main()
6 {
7
8 printf("the range of char: %d ~ %d\n", SCHAR_MIN, SCHAR_MAX);
9 printf("the min of char: %d\n", -(char)((unsigned char)~0 >> 1));
10
11 return 0;
12 }

     分析:

      1,  <limits.h>包含了定义char int short long类型取值的最大值和最小值用常量表示(例如SCHAR_MIN = -128)

            所以直接打印即可。

      2,  如果要自己计算的话,则需要用到按位运算符~,>>,对于-(char)((unsigned char)~0 >> 1)解释:

           a: (unsigned char)~0用二进制表示为:11111111

           b: (unsigned char)~0 >> 1,将(unsigned char)~0逻辑右移1位,结果为:01111111

           c: (char)((unsigned char)~0 >> 1),将((unsigned char)~0 >> 1)由无符号类型强制转换为有符号类型

           d: -(char)((unsigned char)~0 >> 1),得到的二进制结果为11111111,最高位为符号为,对应的十进制

                  数为:-127

      3,  Q:为什么SCHAR_MIN = -128,而自己通过计算得到的char型变量的最小值为-127呢?

           A:绝大部分机器采用补码方式表示有符号整数,

                [-1]补码 = 11111111 ?

                -1 取绝对值 1

                  1 原码 00000001

                  1 反码 11111110

                  反码+1 11111111

                  符号位置为1 11111111 <-- -1的补码

               依次类推,[-2]补码 = 11111110 [-3]补码 = 11111101 ... [-128]补码 = 10000000,

               故char型最小值为-128。

               而自己通过计算得到的-127仅仅是将127取负作为最小值,其实在机器中它应该是倒数第二小值。

转载于:https://www.cnblogs.com/roma823/archive/2011/04/27/2101251.html

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

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

相关文章

EtherCAT主站实时性分析

转载自&#xff1a;https://blog.csdn.net/ethercat_i7/article/details/54018036 一、实时性的意义 在主从DC同步模式下&#xff0c;主站需要以非常精准的时间发送过程数据&#xff0c;如下图所示&#xff1a; 二、实时性的关键 如下图所示&#xff0c;影响实时性的关键因素是…

VNC实现原理

VNC实现的控制原理1.屏幕控制原理VNC是把被控制端的屏幕做成图像&#xff0c;经过压缩后传送到控制端控制端的控制信息&#xff08;如鼠标信息&#xff09;传送到被控制端后进入消息队列客户端X服务器应用程序vnc viewer<-------------------------->Xvnc(vnc server)<…

VNC源码研究(一)

VNC采用RFB通信协议。RFB ("remote 帧缓存 ") 是一个远程图形用户的简单协议&#xff0c;因为它工作在帧缓存级别上&#xff0c;所以它可以应用于所有的窗口系统&#xff0c;例如&#xff1a;X 11,Windows 和 Mac 系统。 独特的计算环境。 RFB 协议可进行可靠的传输…

枚举的一些常用操作

本章将介绍以下几点&#xff1a; 1、如何把其它类型转换为枚举类型&#xff1f; 2、如何把枚举中的值添加到下拉菜单中&#xff1f; 一、如何把其它类型转换为枚举类型&#xff1f; 我们回顾一下有关字符串与数字之间的转换&#xff0c;如&#xff1a; string strValue&quo…

【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史

上一篇文章学会了使用GIT四次提交建立一个有模有样的仓库。点击链接查看&#xff1a;【Git、GitHub、GitLab】三 Git基本命令之创建仓库并向仓库中添加文件. 本片文章记录git的文件重命名的简单方法&#xff0c;以及使用git log系列命令查看git仓库的版本演变历史的用法的。 文…

10个开源免费的电子商务平台(转自伯乐在线)

如今&#xff0c;人们几乎可以在网络上购买到绝大部分东西&#xff0c;从电子产品、衣服&#xff0c;到机票预订和订餐。购物已转移到互联网&#xff0c;你所做的&#xff0c;只是需要付钱。当然&#xff0c;消费者会 非常注重网站的用户体验。所以&#xff0c;一个整洁安全的平…

「电影」黑洞表面

很老的片子&#xff0c;《黑洞表面》&#xff0c;某次在电视上碰见了&#xff0c;可惜看了五分钟不到&#xff0c;就不得不做别的事情去了&#xff0c;于是乎接着在优酷上翻出来看。估计此片太老了&#xff0c;而且貌似还有点经典&#xff0c;所以优酷还设置了所谓「付费观看」…

【Git、GitHub、GitLab】五 git中裸仓库.git下的内容

上一篇文章学习了git的文件重命名与git -log 的系列命令的使用方法。点击链接查看上一篇文章&#xff1a;【Git、GitHub、GitLab】四 Git文件重命名的简单方法以及使用git log查看版本演变历史 本篇文章学习git中&#xff0c;在没有远端服务器的情况下&#xff0c;裸仓库.git中…

金和oa:自定义表单函数计算一段时期内的工作日

今天介绍一下在自定义表单时如何去计算两个日期之间的工作日。这是很常用的一个js函数&#xff0c;比如在加班中&#xff0c;比如在请假中。。。1&#xff0e; 计算两个日期之间的工作日&#xff0c;写附加元素页面<script language"vbscript"> ...Copyrigh…

【Git、GitHub、GitLab】六 GIT中commit、tree和blob三个对象之间的关系

上一篇文章学习了git裸仓库.git中的内容&#xff0c;点击查看上一篇文章&#xff1a;【Git、GitHub、GitLab】五 git中裸仓库.git下的内容 本篇文章记录学习git中commit、tree和blob三个对象之间的关系。 首先需要会使用下面的命令&#xff1a; cat 命令&#xff0c; 功能&am…

POJ 1006

典型的中国余数定理的应用。设m1,m2,..,mk是k个两两互素的正整数&#xff0c;mm1*m2*...*mk&#xff0c;Mim/mi(i1,2,..,k)。则同余方程组x≡b1(mod m1)x≡b2(mod m2&#xff09;......x≡bk(mod mk)有唯一解。x≡M1M1b1&#xff0b;…&#xff0b;MkMkbk &#xff08;modm&…

【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况

上一篇文章学习了GIT中commit、tree和blob三个对象之间的关系&#xff0c;点击链接查看&#xff1a;【Git、GitHub、GitLab】六 GIT中commit、tree和blob三个对象之间的关系 文章目录1 git中如何删除分支2 分离头指针的情况需要注意什么1 git中如何删除分支 如何查看分支&#…

Windows 中自定义Error Codes

Windows 中自定义Error Codes的格式: Bits:31-30292827-1615-0ContentsSeverityMicrosoft/customerReservedFacility codeExceptioncodeMeaning0 Success1 Informational2 Warning3 Error0 Microsoft-defined code1 customer-defined codeMust be 0The first 256 values …

【Git、GitHub、GitLab】八 如何修改commit的message

上一篇文章记录了git中分支的删除以及出现分离头指针的情况&#xff0c;点击查看:【Git、GitHub、GitLab】七 git中分支的删除以及出现分离头指针的情况 文章目录1 如何修改最新的commit的message2 如何修改老旧的commit的message3 如何将连续的多个commit整理成一个4 如何将间…

What means the error-message 'java.lang.OutOfMemoryError: GC overhead limit exceeded' in Java?

转国内的&#xff1a; 一、异常如下&#xff1a;Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded 二、解释&#xff1a;JDK6新增错误类型。当GC为释放很小空间占用大量时间时抛出。一般是因为堆太小。导致异常的原因&#xff1…

【Git、GitHub、GitLab】九 工作中非常重要的一些git用法

上一篇文章学习了 如何修改commit的message&#xff0c;点击链接查看&#xff1a;【Git、GitHub、GitLab】八 如何修改commit的message 注意&#xff1b;下面的‘–’ 都是两个‘-’组成 本文介绍一些在使用git中非常常用的一些命令&#xff1a; 怎么比较暂存区与HEAD所指向的…

【Git、GitHub、GitLab】十 将git仓库备份到本地

上一篇文章学习记录了工作中常用的一些git命令&#xff0c;点击链接查看&#xff1a;【Git、GitHub、GitLab】九 工作中非常重要的一些git用法 文章目录1 git的传输协议2 如何将git仓库备份到本地2.1 使用哑协议备份2.2 使用智能协议备份1 git的传输协议 哑协议与智能协议的区别…

Ibatis XML 配置文件注释引起错误及解决方案

最近在使用Ibatis组件进行一个项目开发&#xff0c;在运行时发现提示如下错误信息&#xff1a; type 异常报告 消息 描述服务器遇到一个内部错误 (), 无法完成此请求。 异常 javax.servlet.ServletException: java.lang.ExceptionInInitializerError根本原因 java.lang.Excep…

java-XML

XML不再多说&#xff0c;XML 约束也不用说了&#xff0c;这里讲讲java如何对XML操作。 java中使用XML&#xff0c;目前常用的就是Jaxp(sun)和dom4j了&#xff0c;这里先讲讲java自带的Jaxp包 JAXP 开发包是J2SE的一部分&#xff0c;它由javax.xml、org.w3c.dom 、org.xml.sax 包…

7款开源ERP系统比较

现在有许多企业将ERP项目&#xff0c;在企 业中没有实施好&#xff0c;都归咎于软件产品不好。其实&#xff0c;这只是你们的借口。若想要将ERP软件真正与企业融合一体&#xff0c;首先得考虑企业的自身情况&#xff0c;再去选择适合的 ERP软件。 如果你的企业是高速发展的中小…