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

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

参考代码:

main.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

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

  1. 怎么计算byte,short,int等数据类型的取值范围

    一个byte由八个位组成,符号位 + 数值位,如x0000000,其中第1位是符号位,后面的7位表示数值,第1位是符号位(0为正,1为负).这样+1就是00000001,-1就是10000001.最大 ...

  2. 请编写一个c程序确定signed,unsigned的char,short,int和long变量取值范围

    way1: 通过打印标准的头文件中的相应的值来完成 符号常量 表示 CHAR_BIT char 的位数 CHAR_MAX char 的最大值 CHAR_MIN char 的最小值 SCHAR_MAX ...

  3. int和long类型取值范围。 基本数据类型 byte , short , char ,int , long , float ,double,boolean类型取值范围

    int和long类型取值范围. 1. int类型 ---------4字节(32位) ​ ------------------------------------------------------- ...

  4. [置顶] C语言中各种数据类型的长度 sizeof char, short, int, long, long long

    这些数据类型的sizeof具体长度依赖于编译器和操作系统(32-bit or 64-bit) 1: 首先,参见c99标准 标准中没有定义这些数据类型的长度,而是定义了这些数据类型能表达的大小范围的最小 ...

  5. int类型变量的取值范围?

    int类型变量的取值范围? 前言 在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围,溢出之 ...

  6. Int类型变量的取值范围为何是2的31次方?

    Int类型变量的取值范围解释 Int类型数据的取值范围为:-2147483648 ~2147483647,即 - 231 ~ 231 -1. 首先:在C++中一个Int类型变量占4个字节,即32位,而 ...

  7. int类型变量的取值范围

    int类型变量的取值范围? 前言 前言 在学C语言的时候应该都会先了解各种基本数据类型的初值和它们的取值范围,有些人可能会不太重视这块内容,其实很重要,很多大公司面试的过程中都会问到int的取值范围, ...

  8. int 几个字节 java_Java中char,short,int,long占几个字节和多少位

    1.字节:byte:用来计量存储容量的一种计量单位:位:bit 2.一个字节等于8位  1byte = 8bit char占用的是2个字节 16位,所以一个char类型的可以存储一个汉字. 整型: b ...

  9. java int范围_Java之int及它的取值范围

    int是Java中的8种基本类型之一,一个int值占4个byte(8个二进制位) 8中基本类型所占字节分别是多少: int4个字节 2个字节 long字节 2个字节 float4个字节 double8 ...

最新文章

  1. UserWarning: Update your `Conv2D`
  2. ActionScript 3.0 Step By Step系列(六):学对象事件模型,从点击按扭开始
  3. JAVA基础知识系列---进程、线程安全
  4. hm编码工具使用_H.265视频编码与技术全析(下)
  5. Mad Libs游戏:熟悉python编程环境,基本输入输出
  6. 【雷达通信】基于matlab Omiga-K算法SAR回波生成和成像【含Matlab源码 1184期】
  7. php留言板系统制作,php制作留言板讲解
  8. 服务器:CPU虚拟化_服务器虚拟化技术
  9. 【渝粤题库】陕西师范大学209020 史记研究 作业(专升本)
  10. 谣言检测论文精读——1.IJCAI2016-Detecting Rumors from Microblogs with Recurrent Neural Networks
  11. From Nand to Tetris Week1 超详细2021
  12. 怎样给计算机设置屏幕锁,怎么给电脑设置锁屏密码
  13. win10右键文件夹卡死未响应的解决方法
  14. 七牛云这个API,让我轻松搞定Banner背景自动切换的功能
  15. 常用计算机二级题库,17年计算机二级office选择题题库
  16. 刨根问底Objective-C Runtime(1)- Self Super
  17. SVG排版公众号文章『自动轮播Banner』模板代码
  18. MATLAB 按组聚类绘图gscatter
  19. Python sqrt()函数的使用
  20. 计算机的优缺点英语作文100词,跪求一篇英语作文 题目:论计算机的优缺点

热门文章

  1. [react] 怎样将多个组件嵌入到一个组件中?
  2. [react] 在React中你有经常使用常量吗?
  3. react学习(71)--render使用
  4. 工作383-获取页面的宽度
  5. [html] html的元素有哪些(包含H5)?
  6. 前端学习(2888):如何短时间内实现v-for 模板编译1
  7. [css] 在实际编写css中你有遇到过哪些浏览器兼容性的问题?怎么解决的?
  8. [css] 说说响应式设计(responsive design)和自适应设计(adaptive design)的区别?
  9. 前端学习(2163):安装clint错误和ESlint规范
  10. “约见”面试官系列之常见面试题之第七十三篇之js文件中import中加{}和不加{}的区别(建议收藏)