å¨Cè¯è¨ä¸ï¼ä¸è¬æ两ç§æ¹æ³æ¥æä½ä½ï¼ä¸ç§æ¯ä½¿ç¨Cè¯è¨æä¾çä½è¿ç®æä½ç¬¦ï¼ä¸ç§æ¯ä½¿ç¨ä½åã
1ã使ç¨ä½å
å¨Cè¯è¨ä¸å®ä¹ä½åçä¸è¬æ ¼å¼å¦ä¸ï¼
struct ä½åç»æå
ãã{ ä½åå表 };
struct:å¨Cè¯è¨ä¸å®ä¹ä½åæ使ç¨çå
³é®åæ¯structã
ä½åç»æåï¼æ¯ä¸ä¸ªCè¯è¨ä¸çæ è¯ç¬¦ï¼æåæ¯ãæ°åãä¸å线ç»æï¼èä¸ç¬¬ä¸ä¸ªå符å¿
é¡»æ¯åæ¯æè
ä¸å线ã
ä½åå表ï¼ç»å
¶ä¸ä½åå表çå½¢å¼ä¸ºï¼ ç±»å说æ符 ä½ååï¼ä½åé¿åº¦
ä¸é¢ç示ä¾ä»£ç ï¼éè¿ä½åæ¥è®¡ç®IEEE754æµ®ç¹æ°ç¼ç ä¸å精度æ°çæå¤§å¼ ãæå°å¼åæå°å¼±è§èæ°ã
#include <
stdio.h>
typedef struct FP_SINGLE
{
unsigned __int32 fraction : 23;
unsigned __int32 exp : 8;
unsigned __int32 sign : 1;
} fp_single;
int main()
{
float x;
fp_single * fp_s = (fp_single *)&x;
fp_s->sign = 0;
fp_s->exp = 0xfe;
fp_s->fraction = 0x7fffff;
printf ("float æ大æ°ï¼ %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0x1;
fp_s->fraction = 0x0;
printf ("float æå°æ°ï¼ %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0;
fp_s->fraction = 0x1;
printf ("float æå°å¼±è§èæ°ï¼%le\n\n",(double)x);
return 0;
}
2ã使ç¨ä½è¿ç®ç¬¦
Cè¯è¨ä¸çä½è¿ç®ç¬¦æä¸ä¸ªåºæ¬ç常è¯ï¼å³åªè½æä½æ´æ°ï¼ä¸è½æä½æµ®ç¹æ°ï¼å 为浮ç¹æ°æ¯ä½¿ç¨IEEE754ç¼ç çï¼ä½¿ç¨ä½æä½æ°æ²¡æä»»ä½æä¹ã
Cè¯è¨æä¾çä½è¿ç®ç¬¦å表ï¼
&
æä½ä¸ å¦æ两个ç¸åºçäºè¿å¶ä½é½ä¸º1ï¼å该ä½çç»æå¼ä¸º1ï¼å¦å为0
|
æä½æ 两个ç¸åºçäºè¿å¶ä½ä¸åªè¦æä¸ä¸ªä¸º1ï¼è¯¥ä½çç»æå¼ä¸º1
^ æä½
å¼æ è¥åå è¿ç®ç两个äºè¿å¶ä½å¼ç¸åå为0ï¼å¦å为1
~ åå ~æ¯ä¸å
è¿ç®ç¬¦ï¼ç¨æ¥å¯¹ä¸ä¸ª
äºè¿å¶æ°æä½ååï¼å³å°0å1ï¼å°1å0
<< 左移 ç¨æ¥å°ä¸ä¸ªæ°çåäºè¿å¶ä½å
¨é¨å·¦ç§»Nä½ï¼å³è¡¥0
>> å³ç§» å°ä¸ä¸ªæ°çåäºè¿å¶ä½å³ç§»Nä½ï¼ç§»å°å³ç«¯çä½ä½è¢«èå¼ï¼å¯¹äºæ 符å·æ°ï¼é«ä½è¡¥0