[英]C casting unsigned char to unsigned char : 4
我目前有一個關於警告的問題。 我有一個方法返回u8
值,其中u8
被定義為unsigned char
。
u8 foo (...)
在結構內部,我有一個成員x
,只需要4位。
struct {
u8 x : 4;
u8 y : 4;
} s;
現在,我想將foo
的返回值分配給x
。 但是,我的編譯器發出了有關unsigned char
轉換為unsigned char
可能造成的損失的警告unsigned char : 4
。 然而,這樣的演員表卻未被認可。
struct_inst.x = (u8 : 4)foo(..);
正確的語法是什么?
與:4
一起使用時,位域類型在C的類型系統中不是正確的類型,因此您不能在強制轉換中使用它們。
您的編譯器警告有點過頭,從一種無符號類型到另一種無符號類型的轉換是定義明確的。 警告的含義是正確的,但是,將8位類型轉換為4位字段可能會丟失信息。 也許您可以通過將返回值與0xF
相乘來使編譯器靜音,以便編譯器看到您願意將更高的位扔掉。
BTW:
<stdint.h>
中存在類型uint8_t
,該類型具有所需的屬性。
在大多數情況下,使用比int
窄的類型不是一個好主意,因為無論如何它們總是在算術上提升為int
。 僅當您獲得的幾個字節確實值得時才使用它們。 如果您的系統中有千兆字節的內存,則不是這樣,例如
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.