久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7031|回復: 0
打印 上一主題 下一主題
收起左側

VBA 中的無符號整數問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:89763 發表于 2015-9-13 15:38 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
因測試需要,我做了Excel的VBA中做了一個小的轉換工具,把一個用C語言格式表示的十六進制數 0xXXX,轉換為用VBA語言表示的&HXXXX的表示方法,并且做幾個移位的動作。只是沒想到,這么一個簡單的事情,在VBA中遇到了不少的麻煩。就在這里簡單的說明一下:

1. 字符串求值函數 val() 的結果范圍只是16位整數,雖然幫助文件中寫的是8字節的6進制范圍。例如:
    Debug.print VAL(“&H8C48”)結果是 : -29624
2. Hex 轉換函數,正負數的處理結果不理想。這樣把一個無符號整數,變成了32位負數。
   debug.print Hex(VAL("&H8C48")) 結果是:FFFF8C48

那么,如何獲取正確的長整數結果呢?只能通過定義長整型變量,對這個16位數先轉換為負數,在求補碼的方式進行調整了。算法如下:
dim n as long  ‘如果定義為 Integer ,就會遭遇溢出錯誤
n=val("&H8C48")    ’此時結果為 n=-29624,是因為 val 函數的范圍是16位
n=n+&H10000      '求負數的16位補碼, n=35912
‘此時在用Hex函數,可以獲取正確的十六進制結果
debug.print hex(n) -->結果為8C48

3. 以&HXXXX形式表示的十六進制立即數的使用,如果第一位是8XXX,則同樣會認定為負數。示例如下:
    dim m as long
    m=1
    if m>= &H8000 then m=m-&H8000
    debug.print m
   此時,m的值應該是多少呢?
  你或許想得到的值是 m=1,實際上,你的m值是 32769(&H8001)
  如何修改呢? 把 &H8000 拆分為 &H7FFF +1,語句變化為:
  if m>&H7FFF then m=m-&H7FFF-1
   這時你就可以得到你想要的結果了。

如果能夠直接使用無符號整數,或者能夠說明十六進制的立即數的類型屬于長整數型,都不會存在這樣的麻煩了。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜激情影院 | 亚洲精品乱码久久久久v最新版 | 欧美 视频 | 精品国产一区久久 | 中文字幕日韩欧美 | 一级免费在线视频 | 日本一区二区三区在线观看 | 国产日韩在线观看一区 | 国产精品成人一区二区三区夜夜夜 | 午夜精品一区二区三区三上悠亚 | 欧美日韩国产在线观看 | 激情国产在线 | 亚洲精品视频导航 | 一区二区视频免费观看 | 精品欧美一区二区精品久久 | 中文一区 | 日韩国产在线观看 | 国产精品久久久久久久白浊 | 亚洲精品乱码久久久久久按摩观 | 国产欧美一区二区三区久久人妖 | 日韩中文字幕在线观看 | 亚洲欧美视频 | 欧美视频一区二区三区 | 久久久www成人免费无遮挡大片 | 毛片一级片 | 丁香婷婷在线视频 | 国产大学生情侣呻吟视频 | 一级黄色裸片 | 日韩一区二区三区在线观看 | 久久久中文 | 亚洲天堂中文字幕 | 国产在线一区二 | 国产在线播放av | 精品国产一区二区三区久久久蜜月 | 男人久久天堂 | 97人澡人人添人人爽欧美 | 成人九色 | 国产资源在线视频 | www.日韩 | 日韩在线中文字幕 | 国内av在线 |