C語言可否自定義數值型別 或是任意個位元組的數值型別

時間 2021-05-14 16:55:53

1樓:null122

struct myStruct;

2樓:BHEscaper

已經有人回答了 Bit fields ,在這裡我補充一下,使用 Bit fields 要注意位元組序的問題。

How Endianness Effects Bitfield Packing

上面鏈結比較詳細的說明了位元組序對 Bit fields 的影響 。

下面的鏈結則給出了一些檢測位元組序的技巧。

Pre-defined Compiler Macros / Wiki / Endianness

3樓:Milo Yip

可以用 Bit fields,但單獨使用時要做 packing:

#include

#pragma pack(push)

#pragma pack(1)

typedef

struct

Foo;

typedef

struct

Bar;

#pragma pack(pop)

intmain(),

b=;Fooc=

;printf

("c = %u\n"

,c.u

);Food=

;Fooe=

;// warning: large integer implicitly truncated to unsigned type [-Woverflow]

printf

("d = %u\n"

,d.u

);printf

("e = %u\n"

,e.u

);printf

("sizeof(Bar) = %u\n"

,(unsigned

)sizeof

(Bar

));Barz=

;printf

("z.x + z.y = %d\n"

,z.x

+z.y

);}輸出:sizeof(Foo) = 3

c = 444

d = 16777215

e = 0

sizeof(Bar) = 3

z.x + z.y = 30.

4樓:

當然可以,不過實現起來麻煩一些而已。

你完全可以用多個 char 拼成乙個資料結構,比如三位元組數值。

struct ThreeBytes

關於c語言自定義的函式,如果是void型別,那麼嚴格意義上這個函式它是返回空值還是根本就沒有返回值?

斷賦千歌 當呼叫乙個 long 返回值的函式時,執行函式的 return 語句時,會將返回值刻意存放在 rax 中。意味著呼叫者可以讀取 rax 來獲得函式返回的結果。void 函式,在執行 return 語句時,不會刻意的修改 rax 的值 在函式的呼叫的過程,會利用 rax 暫存器作為臨時變數,...

keras如何自定義triplet loss損失函式?

周周周 請問我想用keras自定義loss函式,loss y true 0 log y pred y true 0 log 1 y pred 我在實現過程中老是報錯,能麻煩您指導下嗎 其中 x 表示滿足x條件返回1 否則返回0 Rainman 22 這種操作是可以的。我用keras試驗過可行。但是最...

Swift Haskell 等可以自定義運算子的語言(不僅是過載),實現編譯器時跟其他語言有什麼區別?

深海 其他語言我不太了解,簡單說一下 Swift 的實現.Swift Haskell 還有不少函式式語言實現運算子的思路是一樣的 規定運算子必須由某些特殊字元構成,且這些字元和構成識別符號 identifier 的字符集的交集為空.這樣一來,lexer 就很簡單了,和傳統編譯器沒差.除了中綴 二元 ...