咨询C++标准规定的基本整数类型范围及与C标准的差异
C++17与C标准对无符号整数范围及溢出处理的规定
作为常年和底层类型打交道的开发者,我来把C++17和C标准里关于无符号整数范围的核心规定讲清楚:
首先是C++17的明确要求:
在C++17标准的6.9.1节(基本类型)第4点中明确,无符号整数需遵循模2^n的算术法则,其中n为该特定大小整数的值表示位数;
再来看C标准的相关规定:
C标准没有直接用2^n的表述,但本质规则是一致的——它规定:若无符号整数的可表示范围为[0, max],则所有超出该范围的操作,都会自动按照模max + 1的规则进行处理。这里的max其实就是对应C里的2^n - 1,所以max + 1就是2^n,和C的模运算规则完全等价。
举个直观的代码例子帮助理解(以常见的8位unsigned char为例,n=8,max=255):
unsigned char val = 255; val++; // 执行后val的值会变为0,严格遵循模256的算术法则
内容的提问来源于stack exchange,提问作者InsideLoop
相关产品推荐
相关产品推荐

