1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 计算char short int long类型变量的取值范围

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

时间:2022-04-09 21:02:27

相关推荐

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

源自《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

反码+111111111

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

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

故char型最小值为-128。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。