gpt4 book ai didi

c - 类型转换 - unsigned 到 signed int/char

转载 作者:太空狗 更新时间:2023-10-29 16:15:58 31 4
gpt4 key购买 nike

我尝试执行以下程序:

#include <stdio.h>

int main() {
signed char a = -5;
unsigned char b = -5;
int c = -5;
unsigned int d = -5;

if (a == b)
printf("\r\n char is SAME!!!");
else
printf("\r\n char is DIFF!!!");

if (c == d)
printf("\r\n int is SAME!!!");
else
printf("\r\n int is DIFF!!!");

return 0;
}

对于这个程序,我得到输出:

char is DIFF!!! int is SAME!!!

为什么两者的输出不同?
输出应该如下所示吗?

char is SAME!!! int is SAME!!!

A codepad link .

最佳答案

这是因为 C 中有各种隐式类型转换规则。其中有两个是 C 程序员必须知道的: the usual arithmetic conversions 整数提升(后者是前者的一部分)。

在 char 的情况下,你有类型 (signed char) == (unsigned char)。这些都是小整数类型。其他此类小整数类型是 boolshort整数提升规则 指出,只要小整数类型是操作的操作数,其类型就会提升为带符号的 int。无论类型是有符号的还是无符号的,都会发生这种情况。

signed char 的情况下,将保留符号并将其提升为包含值 -5 的 int。对于 unsigned char,它包含一个值为 251 (0xFB) 的值。它将被提升为包含相同值的 int。你最终得到了

if( (int)-5 == (int)251 )

在整数情况下,你有类型 (signed int) == (unsigned int)。它们不是小整数类型,因此整数提升不适用。相反,它们通过通常的算术转换来平衡,这表明如果两个操作数具有相同的“等级”(大小)但符号不同,则带符号的操作数将转换为与无符号操作数相同的类型.你最终得到了

if( (unsigned int)-5 == (unsigned int)-5)

关于c - 类型转换 - unsigned 到 signed int/char,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17312545/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com