[英]Construct an int from binary “components” in C
我有幾個方程將返回我的數字中三位中的每一位的二進制值。
我在 C 中對此進行編程,這對我來說是一種新語言。
所以假設我的方程返回Y0 = 1
, Y1 = 0
和Y2 = 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.