[英]Casting an unsigned long long int to signed long long int Is it possible?
來自傳感器的數據有2種格式SaHpiUint64T和SaHpiInt64T ,應用程序僅用於處理SaHpiUint64T數據。
盡可能鑄造可能是副作用?
/* unsigned 64-bit data, 8-byte alignment */
typedef unsigned long long int SaHpiUint64T __attribute__((__aligned__(8)));
/* signed 64-bit data, 8-byte alignment */
typedef signed long long int SaHpiInt64T __attribute__((__aligned__(8)));
是的,這是可能的。 你甚至不需要演員。 只需將long long int
分配給unsigned long long int
變量即可。
但是, long long int
當然可以包含負值。 如果long long int
傳感器讀數從不為負,則沒有問題。 如果它們可能是負數,則在轉換為unsigned long long int
,這些負值將變為大的正數。 你如何處理這個問題,如果你處理它,那取決於你。
如果您知道傳感器可以產生負值,則添加偏移更有意義,以使偏移值始終為非負值。 兩種選擇是最小可能的傳感器讀數和最小的unsigned long long int
。 使用這種偏移方法,在最大可能的有符號值上不再存在不連續性。
當然你可以施展它們,但你可能會完全錯誤地解釋你的數據:D
整數變量的最后一位(最高值)是有符號int的情況下變量的符號。
現在,如果您感知有符號值,並且感知到負變量,並將其轉換為無符號變量,那么在這種情況下,您將得到一個非常大的數字(2 ^ 63 + abs(原始變量)) 。
如果你以無符號形式感知,並且你感覺到一個大於2 ^ 63的值,並且你將它轉換為有符號的int,你將得到一個等於(原始值 - 2 ^ 63)的值,這是一個負數值。
因此,如果您確定感官數據的范圍,那么您可以安全地在兩者之間施放,否則不能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.