簡體   English   中英

將unsigned long long int轉換為signed long long int是否可能?

[英]Casting an unsigned long long int to signed long long int Is it possible?

來自傳感器的數據有2種格式SaHpiUint64TSaHpiInt64T ,應用程序僅用於處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM