float向u8和s8的轉換

2021-08-25 17:55:04 字數 1136 閱讀 6823

關於float向u8,s8這種型別轉換,比較內藏玄機,還是小心為妙,這種級別的優化做了不如不做。

直接float向char型別的做法是用__ftol2_sse命令完成,具體怎麼做的就不跟了,想跟也能跟,結果放在al裡面,然後move byte到結果。

這裡是如果是範圍相當,float是char能表示的數結果是正確的,如果是更大的,就是從4個byte中擷取乙個byte,不會有自動的clamp到邊界-128這種。

到了針對unsigned char的表示可以看出使用頻繁的loat,store完成的,本身就很慢,儘管c++**很簡潔,但是出來的彙編並不好,結果是擷取類的,也是不會clamp。

float a = -10.0f;

004132fe fld dword ptr [__real@c1200000 (415850h)]

00413304 fstp dword ptr [a]

char b = static_cast(a);

00413307 fld dword ptr [a]

0041330a call @ilt+220(__ftol2_sse) (4110e1h)

0041330f mov byte ptr [b],al

unsigned char c = (unsigned char)a;

00413312 fld dword ptr [a]

00413315 fnstcw word ptr [ebp-0e6h]

0041331b movzx eax,word ptr [ebp-0e6h]

00413322 or eax,0c00h

00413327 mov dword ptr [ebp-0ech],eax

0041332d fldcw word ptr [ebp-0ech]

00413333 fistp dword ptr [ebp-0f0h]

00413339 fldcw word ptr [ebp-0e6h]

0041333f mov al,byte ptr [ebp-0f0h]

00413345 mov byte ptr [c],al

parallel studio自帶intel 的指令集的文件,很不錯

出現u8和uint8之間不匹配的解決辦法

struct si4438 frame uint8 head 5月4號修改uint8變為u8 uint8 dev id 4 介面卡id uint8 my id 2 子裝置id uint8 handle 報文上一跳 uint8 ctrl uint8 data 上電後廣播的是自己的裝置可控燈泡數 uin...

U8常用的二次開發方式

1.單據事件 支援表頭 表體的錄入前 錄入後事件,可操作單據資料 2.工具欄按鈕 分為 標準按鈕前後事件 客開按鈕兩大類。支援獲取介面控制項資料 修改事件上下文 3.eai api openapi co 生成u8標準單據,單據操作事件,單據資料對外協同,三種方式各有側重。綜合功能最強的是api 4....

匯入u8存貨檔案的另乙個辦法

u8的存貨檔案有1萬多個,使用了eai介面從u8匯入,提示失敗。用友提供了如下解決辦法 u8匯入資料時記憶體溢位報錯 fatal error allowed memory size of 1073741824 bytes exhausted tried to allocate 42 bytes in...