c - 在不指定类型的情况下转换为无符号
问题描述
#include <stdio.h>
int main(){
ssize_t a= -1;
size_t b = (unsigned)a;
return 0;
}
a
是 8 字节全部设置为1
,但是在没有做适当的情况下b
转换为 4 字节数,这是为什么呢?为什么它不变成一个 8 字节的无符号变量?unsigned
(unsigned size_t)
解决方案
unsigned
是写作的缩写unsigned int
,所以unsigned
和unsigned int
是同一类型。
unsigned size_t
不存在; size_t
已经没有签名了。
为什么它不变成一个 8 字节的无符号变量?
因为int
s 通常是 32 位或 4 字节。
如果你想要固定宽度的整数,你可以使用stdint.h
which defineduint32_t
等int32_t
。
推荐阅读
- goland - Goland IDE - 离线使用
- java - 如何从队列目的地获取消息?
- python - Numpy 将整数数组保存为浮点数组
- css - CSS - 仅显示第二个 ul 的最后一个 li
- java - 肥皂错误类型:java.lang.ClassCastException
- javascript - Webpack 图像加载器和 Rails
- c# - 未找到自定义 C# 属性的命名空间
- ruby-on-rails - 502 Bad Gateway - Rails 应用程序、Puma、Capistrano、Nginx
- html - 在 bootstrap4 中显示容器后面的图像
- python - 将folium与本地保存的瓷砖一起使用,奇怪的行为