在C编程标准中,“整数”是什么意思-127-1U;?
出于某种原因,我相信这实际上是指-128作为一个整数,但为什么不只是写-128呢 他们可能试图确定用于在特定机器或编译器上保存数据的位的大小。使用8位符号计算,计算将在流量给定128下进行,或不在流量给定-128下进行。在C编程标准中,“整数”是什么意思-127-1U;?,c,binary,C,Binary,出于某种原因,我相信这实际上是指-128作为一个整数,但为什么不只是写-128呢 他们可能试图确定用于在特定机器或编译器上保存数据的位的大小。使用8位符号计算,计算将在流量给定128下进行,或不在流量给定-128下进行。-127-1U是一个常量表达式 127是一个整数常量。它的类型为int,具有明显的价值。一元-运算符应用于它,产生值-127,类型也为int 1U也是一个整数常量。U后缀使其类型为unsigned int 第二个-是减法运算符,它使用两个操作数。根据解析不同类型的二进制(两个操作
-127-1U
是一个常量表达式
127
是一个整数常量。它的类型为int
,具有明显的价值。一元-
运算符应用于它,产生值-127
,类型也为int
1U
也是一个整数常量。U
后缀使其类型为unsigned int
第二个-
是减法运算符,它使用两个操作数。根据解析不同类型的二进制(两个操作数)运算符的规则,int
操作数隐式转换为无符号int
。将-127
从int
转换为unsigned int
(假设int
采用典型的32位2补码表示法)会产生4294967169
类型的unsigned int
(通常是UINT\u MAX-126U
)。从中减去1U
将产生4294967168
,同样是无符号整数类型
我不知道这个表达的目的是什么。我必须看到更多的背景来推测。写UINT\u MAX-127U
[需要引文]:)会更清楚一些。我没有在中看到它。你能给出一些上下文来说明你在哪里看到过它,即一段可编译的代码吗?这样你会得到一个更好的答案。如果int
大小是8位,这将是相关的。对于我的32位int
库有#define int_MIN(-2147483647-1)
,因为2147483648
在int
范围之外,所以-2147483648
不起作用。相关:签名的“下溢”是UB。@EugeneSh。计算是在无符号整数中进行的。没有“U”整数类型。整数常量上的U
后缀会导致其类型为unsigned int
(如果值超过UINT\U MAX
,则为某种更宽的无符号整数类型)<代码>1
属于类型int
1U
的类型是unsigned int
@mch是的,但它不会“下溢”,但首先-127
将通过添加UINT_MAX+1
然后减去1U
转换为unsigned int int
。因此基本上-128会导致下溢,可以使用-127-1U覆盖?