•  题目来源:《The C programming language》中的习题P27
  •  练习2-1: 编写一个程序以确定分别由signed及unsigned限定的char、short、int与long类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。后一种方法的实现较困难一些,因为要确定各种浮点类型的取值范围。

  采用打印标准头文件中的相应值:

#include <stdio.h>
#include <limits.h> int main()
{
printf("采用打印标准头文件limits.h中的相应值:\n");
//signed types
printf("signed char min = %d\n", SCHAR_MIN);
printf("signed char max = %d\n", SCHAR_MAX);
printf("signed short min = %d\n", SHRT_MIN);
printf("signed short max = %d\n", SHRT_MAX);
printf("signed int min = %d\n", INT_MIN);
printf("signed int max = %d\n", INT_MAX);
printf("signed long min = %ld\n", LONG_MIN);
printf("signed long max = %ld\n", LONG_MAX);
//unsigned types
printf("unsigned char max = %u\n", UCHAR_MAX);
printf("unsigned short max = %u\n", USHRT_MAX);
printf("unsigned int max = %u\n", UINT_MAX);
printf("unsigned long max = %lu\n", ULONG_MAX);
return ;
}

  执行结果:

  直接计算的方式:

#include <stdio.h>
//determine ranges of types
int main()
{
printf("采用直接计算的方式:\n");
//signed types
printf("signed char min = %d\n", -(char)((unsigned char)~>>)-);
printf("signed char max = %d\n", (char)((unsigned char)~>>));
printf("signed short min = %d\n", -(short)((unsigned short)~>>)-);
printf("signed short max = %d\n", (short)((unsigned short)~>>));
printf("signed int min = %d\n", -(int)((unsigned int)~>>)-);
printf("signed int max = %d\n", (int)((unsigned int)~>>));
printf("signed long min = %ld\n", -(long)((unsigned long)~>>)-);
printf("signed long max = %ld\n", (long)((unsigned long)~>>));
//unsigned types
printf("unsigned char max = %u\n", (unsigned char)~);
printf("unsigned short max = %u\n", (unsigned short)~);
printf("unsigned int max = %u\n", (unsigned int)~);
printf("unsigned long max = %lu\n", (unsigned long)~);
return ;
}

  执行结果:

  备注:

  • <limits.h>包含了定义char int short long类型取值的最大值和最小值用常量表示(例如SCHAR_MIN = -128), 所以直接打印即可。
  • 如果直接计算的话,则需要用到按位运算符~和右移运算符>>,对于-(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

  • 因为绝大部分机器采用补码方式表示有符号整数,所以需要在-(char)((unsigned char)~0 >> 1)的基础上再减去1,才是真正的最小值。

  参考资料:

  [1] http://www.cnblogs.com/wangzhiyu811/archive/2011/07/12/2104377.html

  [2] http://blog.csdn.net/roma823/article/details/6367142

【C语言】练习2-1的更多相关文章

  1. C语言 · 高精度加法

    问题描述 输入两个整数a和b,输出这两个整数的和.a和b都不超过100位. 算法描述 由于a和b都比较大,所以不能直接使用语言中的标准数据类型来存储.对于这种问题,一般使用数组来处理. 定义一个数组A ...

  2. Windows server 2012 添加中文语言包(英文转为中文)(离线)

    Windows server 2012 添加中文语言包(英文转为中文)(离线) 相关资料: 公司环境:亚马孙aws虚拟机 英文版Windows2012 中文SQL Server2012安装包,需要安装 ...

  3. iOS开发系列--Swift语言

    概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言.ObjC的特性,且克服了C语言的兼容性问题.Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在 ...

  4. C语言 · Anagrams问题

    问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的.例如,"Unclear"和"Nuclear ...

  5. C语言 · 字符转对比

    问题描述 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一: 1:两个字符串长度不等.比如 Beijing 和 Hebei 2:两个字符串不仅长度相 ...

  6. JAVA语言中的修饰符

    JAVA语言中的修饰符 -----------------------------------------------01--------------------------------------- ...

  7. Atitit 项目语言的选择 java c#.net  php??

    Atitit 项目语言的选择 java c#.net  php?? 1.1. 编程语言与技术,应该使用开放式的目前流行的语言趋势1 1.2. 从个人职业生涯考虑,java优先1 1.3. 从项目实际来 ...

  8. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  9. InstallShield 脚本语言学习笔记

    InstallShield脚本语言是类似C语言,利用InstallShield的向导或模板都可以生成基本的脚本程序框架,可以在此基础上按自己的意愿进行修改和添加.     一.基本语法规则      ...

  10. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

随机推荐

  1. pip通过requirements.txt安装依赖

    pip install -t . -r requirements.txt requirements.txt Keras==2.0.8 gensim torchvision opencv-python ...

  2. PHP的异常以及异常存在的意义

    php的try catch与其它语言的try catch相比有许多不同,而且用起来相对比较不爽. php中,如果你制作的站点相对较大,同时模块化,并且在错误处理机制上有一套自己的处理机制,可以尝试使用 ...

  3. Android Studio 打包时 Signature Version 选择 V1 V2 说明

      问题描述(v1和v2) Android 7.0中引入了APK Signature Scheme v2,v1是jar Signature来自JDKV1:应该是通过ZIP条目进行验证,这样APK 签署 ...

  4. 配置windows失败,不能进入系统

    曾经,遇到过<配置windows失败,还原更新,请勿关机>,可多次尝试都无效. 包括: 1.    安全模式(进不了系统) 2.    带命令的安全模式 3.    最后一次正确的配置 4 ...

  5. Jenkins Xcode 证书设置错误 Code Sign error: No matching codesigning identity found: No codesigning identities

    Jenkins 集成Xcode 项目的时候在证书上遇到了问题.实际上如果在本地的话.只要Xcode工程里选择了项目就不需要重新设置证书了.jenkins会自动找到这个证书,只要在build setti ...

  6. LintCode: Valid Parentheses

    C++ stack<char|int|string>, push(), pop(), top(), empty(), size() class Solution { public: /** ...

  7. pyqt、webkit和qt之间的关系

    前言 最近在维护一个PYQT的项目,有很多不明白的地方,总结一下,共其他直接使用pyqt的人参考一下.PyQT是一个生成图形应用程序的工具包.是python语言和成功的Qt库的绑定.Qt库是这个世界上 ...

  8. python object对象

    动态语言的对象属性 既然都是动态语言,自然python和熟知的JavaScript很像,建一个空对象用来存放所有的数据,看看js: var data = {}; data.name = 'CooMar ...

  9. ReactNative踩坑日志——fetch如何向服务器传递参数

    一:简单参数 简单的参数,我们可以使用手动拼接的方式传递. 格式为: fetch(url?key1=val1&key2=val2&...).then((response) => ...

  10. WCF 客户端 BasicHttpBinding 兼容 HTTPS 和 HTTP

    背景:全站HTTPS的时代来了 全站HTTPS,请参考:http://www.cnblogs.com/bugly/p/5075909.html 1. 设置BasicHttpBinding的BasicH ...