struct in_addr ipv4;
ipv4.s_addr = (uint32_t)(-0)
答案 0 :(得分:6)
这很奇怪,通常算术是通过Two's Complement实现的,所以你不能有效地表达0
。
在 One's Complement 版本中,否定0
存储为0xFFFFFFFF
,因此在转换为转换为ipv4地址后,您将拥有255.255.255.255
unsigned int。
在使用-0
将其转换为unsigned int的普通架构中,应该只给你0x00000000
。
答案 1 :(得分:1)
这没有太大意义,因为标准说明了确切的宽度整数类型
这些类型是可选的。但是,如果 实现提供整数 宽度为8,16,32或64的类型 位,没有填充位,和(对于 签名类型)有两个 补充表示,它应该 定义相应的typedef 名。
首先,对于任何这些签名类型,没有负零,对于无符号类型,则更少。在任何情况下,您展示的简单0
任务都会很好,或UINT32_C(0)
如果您想挑剔。
答案 2 :(得分:0)
它将用于获取无符号整数的有符号值,或者比有符号整数的最大值多一个。
uint32_t
将它转换为无符号整数,而-0
将强制它为负数,翻转有符号位,并返回无符号值并翻转它。
This article解释了有符号的整数。