这个取值范围我个人认为了解一下就行,目前还接触不到那么深的层次,第一个直接打印已经提供的设定值看着挺头晕的,那么长一串,但是说起来也就是将limits.h头文件里的几个设定值用printf函数打印了。而且就大写字母来看应该是宏定义的。
还有一种是书上写的按位运算得到最大值。这个想要理解把上面那些东西弄明白,首先弄明白按位取反~0就变成了机器允许存在的所有位全是1,把他强制转换成无符号类型。无符号类型因为没有正负,最高位也可以计数。而不代表正负符号。要把他变成有符号的类型就需要右移一位将最高位让出变成符号位。因为最高位自动补位应该是0,而机器又规定最高位是0时为正数。为1时是负数所以现在是一个正数。然后再将其强制转换成相应的有符号类型,所以转换后得到的就是取值范围的最大值。这里强制转换是优先保留低位。高位溢出则舍弃。
这种位运算还是挺麻烦的。
网友评论