Union of signed and unsigned values

I understand this may be a silly question, but I’m curious if I missed something in researching for an approach to have both a signed and unsigned version of a value in a type. I expect the answer to my question to be no, given that the max value of say an i32 and an u32 is different (i.e. they both have the same memory size, but u32 does not use the first bit for a sign, so it can have a higher value, etc…)

I have a need to maintain a signed value for internal functionality, but need to display it’s absolute value in various places. Additionally I need to provide the absolute value to a vendor library as a pointer. Currently I’m doing alot of back and forth managment with multiple variables using the abs function, which is fine, but my geeky side was wanting to make this more streamlined.

I’ve tried the following, which understandably does not work. I wonder though, is there a way for the signed bit to be preserved in the i32, and for the u32 to keep the signed bit as 0, so that I can update either and the other reflect the same value but as their respective type as signed or unsigned?

flippity :: struct #raw_union {
  i: i32,
  u: u32,
}

main :: proc() {
  num: flippity
  num.i = -1
  fmt.println(num.u)
}