#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,但是b在unsigned没有做适当的情况下转换为 4 个字节的数字(unsigned size_t),这是为什么?为什么它不会变成一个 8 字节的无符号变量?
unsigned是 write 的缩写unsigned int,所以unsigned和unsigned int是同一种类型。
unsigned size_t不存在; size_t是已经无符号的。
为什么它不会变成一个 8 字节的无符号变量?
因为ints 通常是 32 位或 4 字节。
如果你想固定宽度的整数你可以使用stdint.h它定义uint32_t,int32_t等等。