强制转换为无符号而不指定类型

1 c unsigned casting size-t

#include <stdio.h>

int main(){
  ssize_t a= -1;
  size_t b = (unsigned)a;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

a是 8 个字节都设置为1,但是bunsigned没有做适当的情况下转换为 4 个字节的数字(unsigned size_t),这是为什么?为什么它不会变成一个 8 字节的无符号变量?

d3L*_*d3L 5

unsigned是 write 的缩写unsigned int,所以unsignedunsigned int是同一种类型。

unsigned size_t不存在; size_t已经无符号的。

为什么它不会变成一个 8 字节的无符号变量?

因为ints 通常是 32 位或 4 字节。

如果你想固定宽度的整数你可以使用stdint.h它定义uint32_tint32_t等等。