C语言加强学习营(二):定义整型的最大值和最小值

本文介绍了C语言中无符号和有符号整型的最大值及最小值的计算方法。对于无符号整型,最大值通过位非运算获得;有符号整型最大值则通过取反和适当位移实现。最小值部分,无符号整型的最小值为0,而有符号整型的最小值是补码表示的最小负数,符号位为1,其余位全为1。

示例

#include <stdio.h>
#include <stdint.h>

int main(int argc, char **argv)
{
  uint8_t uint8_max = ~(uint8_t)0; /*!< 定义无符号字符型型的最大值 */
  int8_t int8_max = (int8_t)((uint8_t)(~1) >> 1); /*!< 定义有符号字符型的最大值 */

  uint32_t uint32_max = ~(uint32_t)0;
  int32_t int32_max = (int32_t)((uint32_t)(~1) >> 1);
  
  int8_t int8_min = ~int8_max;

  printf("Min of int8_t is 0x%X - %d\n", int8_min, int8_min);
  printf("Max of int8_t is 0x%X - %d\n",int8_max, int8_max);
  printf("Max of uint8_t is 0x%X - %u\n",uint8_max, uint8_max);
  printf("Max of int32_t is 0x%X - %d\n", int32_max, int32_max);
  printf("Max of uint32_t is 0x%X - %u\n", uint32_max, uint32_max);
}
root@seven:~/workspace/test/16.values# gcc value.c 
root@seven:~/workspace/test/16.values# ./a.out 
Min of int8_t is 0xFFFFFF80 - -128
Max of int8_t is 0x7F - 127
Max of uint8_t is 0xFF - 255
Max of int32_t is 0x7FFFFFFF - 2147483647
Max of uint32_t is 0xFFFFFFFF - 4294967295

解析

最大值

对于无符号整型数据,最大值即为每都是1,所有可以使用位操作运算符~(位非): <unsigned type> max = ~(<unsigned type>)0;
对于有符号整型数据,最大值为符号位为0,其他位都为1: <signed type> max = (<signed type>)((<unsigned type)(~1) >> 1);,先取反,然后使用除2或者右移一位的方式时最高位(符号位)为0(正数),即得到有符号型数据最大值。

最小值

对于无符号整型数据,最小值即为0;
对于有符号整型数据,最小值为能表示的最小负数,由于负数编码为补码表示,故最小值符号位为1(负号),其他位全为0: <signed type> min = ~(max);


——生活不会放弃你,但也不会放过你。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值