C++无符号整数和有符号整数之间进行转换

C++ converting between unsigned integers and signed integers

本文关键字:之间 转换 整数 符号 无符号整数 C++      更新时间:2023-10-16

为什么下面的代码先写 B2,然后写 A1?它不应该同时写A1吗?C++ 中的隐式数据类型从有符号 int 转换为无符号 int(层次结构中较高(

short a=-5;
unsigned short b=-5u;
if(a==b)
    printf("A1");
else
    printf("B2");
// prints B2
int a2=-5;
unsigned int b2=-5u;
if(a2==b2)
    printf("A1");
else
    printf("B2");
return 0;
// prints A1

将负符号整数类型转换为unsigned总是下溢,并产生模算术。 unsigned int x = (unsigned int)-1商店UINT_MAXx

例:

unsigned int x = (unsigned int) -1;
std::cout << x << std::endl;
x = (unsigned int) -5;
std::cout << x << std::endl;

输出:

4294967295
4294967291

请注意,-1-5 都已转换为极高的值,其差值也等于 4。

对于给定的代码

short a=-5;
unsigned short b=-5u;
if(a==b)
    printf("A1");
else
    printf("B2");

对于 sizeof(short) <sizeof(int) int=" int=" _x0032_=" k=" _x002D_=" _x0035_=">k 是unsigned short中值表示位数。

因此,int它们是不同的,即使它们可能是相同的short大小的位模式。