簡體   English   中英

從 C 中的二進制“組件”構造一個 int

[英]Construct an int from binary “components” in C

我有幾個方程將返回我的數字中三位中的每一位的二進制值。

我在 C 中對此進行編程,這對我來說是一種新語言。

所以假設我的方程返回Y0 = 1Y1 = 0Y2 = 1 ( 101 ); 我想將該值存儲為5

如果這些值由不同的方程返回,這在 C 中是否可行?

我知道如何通過乘法來做到這一點,但我正在尋找 function 或我想已經內置在 C 中的東西。

沒有這樣的運氣。 您必須相乘(或移位,這是相同的)

unsigned Y0 = 1, Y1 = 0, Y2 = 1, val;

val = (Y0 * 4)  + (Y1 * 2)  + (Y2 * 1);  /* parens */
val = (Y0 << 2) + (Y1 << 1) + (Y2 << 0); /* redundant */

只是位移:

Y0 | (Y1 << 1) | (Y2 << 2)

C標准庫中沒有這樣的function。

你需要做:

int x = (Y2 << 2) | (Y1 << 1) | (Y0 << 0);

雖然不是很受歡迎,但您確實有一個替代方案,因為您可以使用位字段來執行您正在談論的操作類型。 因此,在ideone上,以下代碼將執行您建議的操作。

union combine {
    struct bits{
        int x: 1;
        int y: 1;
        int z: 1;
        int pad : 29;
    } bitvalues;
    int value;
};

int main() {
    union combine test;
    test.bitvalues.x = 1;
    test.bitvalues.y = 0;
    test.bitvalues.z = 1;
    test.bitvalues.pad = 0;
    printf("result: %d\n", test.value);
    return 0;
}

然而,重要的是要注意,因為您使用的是位域和聯合的組合,所以這不是一個可移植的解決方案 它取決於您定義位的順序,匹配該機器上 integer 的位/字節順序。 因此,有一種方法可以在不進行位移的情況下做到這一點,但幾乎可以肯定的是,使用位移解決方案會更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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