[英]How can I return an unsigned integer as a binary value in C?
更具體地說,我需要制作一個float_16(unsigned sign, unsigned exp, unsigned frac)
函數,該函數返回給定一個帶正負號,指數和小數的數字的bit16
表示形式( bit16是typedef無符號整數 )。
我有以下序言:
int main(int argc, const char * argv[]) {
typedef unsigned int bit16;
bit16 a;
a = 0xABCD; // 1010 1011 1100 1101 in binary = 43981
printf("Sign is: %d",extractSign(a));
printf(" ");
printf("Exponent is: %d",extractExp(a));
printf(" ");
printf("Fraction is: %d",extractFrac(a));
…
}
在我的主程序中,這些值由函數在單獨的C文件中檢索:
int extractSign(bit16 x) //significant bit
{
return (x >> 15) & 0x0001; // 0x0001 is mask for 1 bit
}
int extractExp(bit16 x) // 7 bits
{
return (x >> 8) & 0x007F; // 0x007F is mask for 7 bits
}
int extractFrac(bit16 x) // 8 bit fraction field
{
return x & 0x00FF; // 0x00FF is mask for 8 bits
}
我將如何使用這些值來滿足此處的要求?
您可以使用工會 。
#include <stdio.h>
typedef unsigned short bit16; // On my computer, sizeof (int) == 4, while sizeof (short) == 2
union floating_point
{
bit16 a;
struct
{
unsigned frac : 8;
unsigned exp : 7;
unsigned sign : 1;
} guts;
};
bit16 float_16 (unsigned sign, unsigned exp, unsigned frac);
unsigned extractSign (bit16 a);
unsigned extractExp (bit16 a);
unsigned extractFrac (bit16 a);
int main(int argc, const char * argv[])
{
bit16 a = 0xABCD;
printf("%d\n",a == float_16(extractSign(a),extractExp(a),extractFrac(a)));
printf("Sign is: %u\n",extractSign(a));
printf("Exponent is: %u\n",extractExp(a));
printf("Fraction is: %u\n",extractFrac(a));
return 0;
}
bit16 float_16 (unsigned sign, unsigned exp, unsigned frac)
{
union floating_point value;
value.guts.sign=sign;
value.guts.exp=exp;
value.guts.frac=frac;
return value.a;
}
unsigned extractSign (bit16 a)
{
union floating_point value;
value.a=a;
return value.guts.sign;
}
unsigned extractExp (bit16 a)
{
union floating_point value;
value.a=a;
return value.guts.exp;
}
unsigned extractFrac (bit16 a)
{
union floating_point value;
value.a=a;
return value.guts.frac;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.