• ベストアンサー

16進数の変換処理

VisualBasic6.0で Val("&H" & "F") を実行すると、15 Val("&H" & "FF") を実行すると、255 Val("&H" & "FFF") を実行すると、4095 Val("&H" & "FFFF") を実行すると、-1 Val("&H" & "FFFFF") を実行すると、1048575 という結果が得られます。 なぜ”FFFF”の時に”-1”が返ってくるのでしょうか? また、どうやったら、 ”FFFF”から”65535”が得られるのでしょうか? 教えてください。 よろしくお願いします。

noname#5252
noname#5252

質問者が選んだベストアンサー

  • ベストアンサー
  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.2

VAL関数 指定した文字列に含まれる数値を適切なデータ型に変換して返します。 FFFFは、INT型で扱える最大値なのでINT型と判定されます。 cint("&H"+"FFFF")だと、-1が返ります。 FFFFFは、INTの扱える値を超えたのでLONG型で判定される為に1048575と言う結果になるのです。 では、なぜマイナスになるのか? FFFFを2進数で表すと以下のようになりますね。 11111111 11111111 11111111 11111111 ↑先頭の1バイト目が1だとマイナスとして扱われます。 以上です。

noname#5252
質問者

お礼

解かりました! すっごくよく理解できました。 本当にありがとうございました。

その他の回答 (1)

  • BlueRay
  • ベストアンサー率45% (204/453)
回答No.1

clng("&H"+"FFFF") csng("&H"+"FFFF") cdbl("&H"+"FFFF") 上記3点なら、65535で帰ってきますよ。 要するに、うまく扱えないとかって理由です。 (詳しい事は・・・勘弁して(^^;)

関連するQ&A

  • Solarisでコンフリクト

    Intel版Solaris8をIBMのThinkCenterA50にインストールしています。 (マザーはIntel865Gです) インストール開始時に、色々ドライバ等を読み込んだりしていますが、 その際、コンフリクトがあると下記のメッセージが表示されます。 -------------------------------------------------------------- Loading escd.rf... WARNING : Resouce Conflict - both devices are added NON-ACPI device : INT0800 Memory : FFB80000-FFBFFFFF , FFB00000-FFB7FFFF , FFA80000-FFAFFFFF, FFA00000-FFA7FFFF , FF980000-FF9FFFFF , FF900000-FF97FFFF, FF880000-FF8FFFFF , FF800000-FF87FFFF , FF000000-FF7FFFFF ACPI device : INT0800 Memory : FF800000-FFFFFFFF -------------------------------------------------------------- その後のDeviceTask画面で見ると、 NON-ACPIは、ISA:PnP bios:Flash Memory ACPIは、ISA:ACPI:Flash Memory のようです。でもこれが判ったからと言ってどこで何をどう修正すれば良いのか 判りません・・・。 削除/追加すると言ってもPortやIRQ等判らないので・・・汗 一回これを無視して最後までインストールしてパッチも当ててみましたが、 ログイン画面からログインすると、即効でログアウトされてしまう事象が発生し これも解決できなくて困っています。これは上のコンフリクトに起因しているの でしょうか? どうか助けてください・・・。よろしくお願いいたします。

  • 割り込みなしのタイマー

    以下のような割り込みを用いないタイマーを使うプログラムをH8マイコンで動かしたいのですが、上手くいきません・・・。表示を1秒間隔で切り替えていくものです。どこがよくないのでしょうか? MOV.L #FFFFD1,ER0      //PADDR MOV.B #FF,R1L //FF=11111111 MOV.B R1L,@ER0 //PADDR = FF MOV.L #FFFFD4,ER0      //PBDDR MOV.B #FF,R1L //FF=11111111 MOV.B R1L,@ER0 //PBDDR = FF MOV.L #FFFFD6,ER0      //PBDR MOV.B #5B,R1L //5B = "2" MOV.B R1L,@ER0 //PBDR = 5B MOV.L #FFFFD3,ER0      //PADR MOV.B #01,R1L //01 = 0KETA MOV.B R1L,@ER0 //PADR = 0KETA **128 MOV.L #FFFF64,ER2 //TCR0 MOV.B #83,R1H //83 = 1/8 MOV.B R1H,@ER2 //TCR0 = 1/8 MOV.L #FFFF6A,ER3      //GRA0 MOV.W #61A8,E1 //61A8 = 25000 MOV.W E1,@ER3 //GRA0 = 25000 MOV.W #3E8,E4 //3E8 = 1000 MOV.W #0,R4 // 0 MOV.B #F9,R5L // F9 MOV.L #FFFF67,ER0      //TSR0 MOV.L #FFFF60,ER6      //TSTR MOV.B #1,R5H MOV.B R5H,@ER6 //TSTR = 1 *158 MOV.B @ER0,R5H //TSR0の値 CMP.B R5L,R5H BNE FFF* MOV.B #F8,R5H //初期値に戻す MOV.B R5H,@ER0 INC.W #1,R4 CMP.W R4,E4 BNE FFF* MOV.B #0,R5H //ストップ MOV.B R5H,@ER6 MOV.L #FFFFD3,ER0      //PADR ADD.B R1L,R1L //表示桁の更新 MOV.B R1L,@ER0 BRA FFF**

  • 不正な処理 に困っています

    きょうペイントを使用中に「不正な処理・・」となって しまい、何度やっても「不正な処理・・」になるので一度 ペイントをアンインストールして再インストールしてみました。でもダメなんです。 どうすればいいのでしょうか? 詳細は以下の通りです。 よろしくお願いします。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ MSPAINT の一般保護違反です。 モジュール : DIBENG.DLL、アドレス : 0005:00003f0a Registers: EAX=ffffffff CS=037f EIP=00003f0a EFLGS=00010202 EBX=013f08d6 SS=944f ESP=cd8e82a2 EBP=000082c8 ECX=000008d6 DS=cc2f ESI=00000000 FS=18df EDX=fffdb94c ES=cc2f EDI=ffff0fa4 GS=073f Bytes at CS:EIP: f3 ab 66 89 07 03 fa 81 eb 00 00 01 00 7d ee c3 Stack dump: 000041c5 40ffffff 00003d79 41a40000 ffff0000 ffff40ff dca4ffff 5674fffe 03e70309 84366384 036f31d7 22e390d7 00006336 00008468 00008300 00000001

  • CASLII:メモリの値について

    LESSON3_8_2 START ; FFFFから0FFFを論理減算 LD GR1,CFFFF ;FFFFをロード SUBL GR1,C0FFF ;FFFF-0FFF ST GR1,ANS ;結果をANSに格納 RET CFFFF DC #FFFF C0FFF DC #0FFF ANS DS 1 END 1週間で分かる集中ゼミ【CASLII】P.274より抜粋 以上のように、演習問題の解答例があったのですが下から4行目と3行目のCFFFFとC0FFFのメモリの値は存在しないのではないでしょうか?COMETIIの場合、アドレスとして0000~FFFFまでの値しか使用できないと習ったのですが…

  • IPv4とIPv6でのLAN設定

    Windows XPのPCを2台使用し、ともにインターネットに接続しています。 接続方法はNTT西日本のフレッツ光で、2台のLANケーブルをスイッチングハブに接続し そこからケーブルをGE-PON-ONUと機器に繋げモジュラージャックに接続しています。 その2台のPCをLANでつなぎファイルをやりとり出来るようにしたいと思い、現在その設定の途中です。 そこで、IPアドレスの確認をしていたところ、片方のPCでは IPアドレス:192.168.1.2 サブネットマスク:255.255.255.0 デフォルトゲートウェイ:192.168.1.1 とIPv4での値が出るのですが,もう一方のPCではでipconfig /allコマンドを打ち確認してみたところ Ethernet adapter ローカル エリア接続 2: Connection-specific DNS Suffix . : mshome.net Description . . . . . . . . . . . : VIA Networking Velocity-Family Giga- bit Ethernet Adapter Physical Address. . . . . . . . . : 00-40-45-2F-FF-68 Dhcp Enabled. . . . . . . . . . . : Yes Autoconfiguration Enabled . . . . : Yes IP Address. . . . . . . . . . . . : 192.168.0.76 Subnet Mask . . . . . . . . . . . : 255.255.255.0 IP Address. . . . . . . . . . . . : 2001:a5e0:1fff:618:b4f3:e215:ec7d:9b ab IP Address. . . . . . . . . . . . : 2001:a5e0:1fff:618:71d5:2ca7:1af2:93 e0 IP Address. . . . . . . . . . . . : 2001:a5e0:1fff:618:e4f3:d01b:156d:31 d6 IP Address. . . . . . . . . . . . : 2001:a5e0:1fff:618:39dd:28f1:b747:36 b6 IP Address. . . . . . . . . . . . : 2001:a5e0:1fff:618:b45f:8c46:9165:43 0 IP Address. . . . . . . . . . . . : 2001:a5e0:1fff:618:240:45ff:fe2f:ff6 8 IP Address. . . . . . . . . . . . : fe80::240:45ff:fe2f:ff68%4 Default Gateway . . . . . . . . . : 192.168.0.1 fe80::212:e2ff:fe70:2100%4 DHCP Server . . . . . . . . . . . : 192.168.0.1 DNS Servers . . . . . . . . . . . : 192.168.0.1 fec0:0:0:ffff::1%1 fec0:0:0:ffff::2%1 fec0:0:0:ffff::3%1 Lease Obtained. . . . . . . . . . : 2010年11月20日 23:46:47 Lease Expires . . . . . . . . . . : 2010年11月27日 23:46:47 と表示され、IPv6の形式で出力されています。 これら2台のPCでLAN接続を行い、相互にファイルをやり取りすることは可能なのでしょうか。

  • タイマーを用いたプログラム

    H8のマイコンを用いて、7セグメントLEDを 1秒間隔で表示を切り替えるプログラムを作りたい のですが、いまいち上手くいきません。。。 タイマー割り込みは用いずに行いたいのですが、以下のプログラムでどこが間違っているのでしょうか?? MOV.L #FFFFD1,ER0 //PADDR MOV.L #FFFFD4,ER1 //PBDDR MOV.B #FF,R2L //FF=11111111 MOV.B R2L,@ER0 //PADDR = FF MOV.B R2L,@ER1 //PBDDR = FF MOV.L #FFFFD6,ER0 //PBDR MOV.L #FFFFD3,ER1 //PADR MOV.B #5B,R2L //5B = "2" MOV.B R2L,@ER0 //PBDR = 5B MOV.B #01,R2L //01 = 0KETA MOV.B R2L,@ER1 //PADR = 0KETA *** MOV.L #FFFF64,ER3 //TCR0 MOV.B #83,R2H //83 = 1/8 MOV.B R2H,@ER3 //TCR0 = 1/8 MOV.L #FFFF6A,ER3 //GRA0 MOV.L #61A8,ER4 //61A8 = 25000 MOV.L ER4,@ER3 //GRA0 = 25000 MOV.W #3E8,E3 //3E8 = 1000 MOV.W #0,R3 // 0 MOV.B #F9,R4L // F9 MOV.L #FFFF67,ER5 //TSR0 MOV.L #FFFF60,ER3 //TSTR MOV.B #1,R2H //TSTR = 1 ** MOV.B @ER5,R4H //TSR0の値 CMP.B R4L,R4H //比較 BNE FFF** //ループ MOB.B #F8,R4H //初期値に戻す MOV.B R4H,@ER5 // INC.W #1,R3 //ループ数 CMP.W R3,E3 //比較 BNE FFF** //ループ MOV.B #0,R2H //タイマーのストップ MOV.B R2H,@ER3 // ADD.B R2L,R2L //表示桁の更新 MOV.B R2L,@ER1 // BRA FFF***

  • 「楽TV」を入れたらsafeMODEでも不正な処理…で起動しません

    http://betiblue.hp.infoseek.co.jp/ にある「楽TV」をインストールした所 起動中に警告が出て正常に起動しなくなりました… 順を追って説明します 壁紙が表示され起動音が鳴ると共に {Explorer}ウィンドウが出て このプログラムは不正な処理を行ったので強制終了されます 終了しない場合はプログラムの製造元に連絡してください と出ます [詳細]を見ると EXPLORER のページ違反です。 モジュール : EXPLORER.EXE、アドレス : 015f:00402541 Registers: EAX=00000000 CS=015f EIP=00402541 EFLGS=00010246 EBX=00000001 SS=0167 ESP=005fff20 EBP=005fff28 ECX=cd256550 DS=0167 ESI=00000000 FS=2bff EDX=005fff30 ES=0167 EDI=00000000 GS=0000 Bytes at CS:EIP: 8b 08 50 ff 11 8b 45 08 50 8b 08 ff 51 08 8b 45 Stack dump: 004024f0 005fff30 005fff68 0040547c 00000000 00000000 00000000 00000001 00403ab6 0059fc30 00000008 00000000 00000000 0000ffff 72cdc98c 00000001 と表示されます (上記はスペースや改行まで正確に入力) (※ECXとFSの値は起動毎に若干変化) safeMODEで起動しても同じです (※下3行については 1行の字数が8字づつ長いが順序は同じ) で[閉じる]のですがそこで止まります 表示されているのは壁紙とポインタだけ(ポインタは動く) スタート等があるバーはなくWindowsキーを押してもメニューは出ない アイコンも無いです …待ってても仕方ないので [Ctrl]+[Alt]+[Delete]を押すと <Pcciomon>のみの状態(※safeMODE時は空欄) …で、[シャットダウン]するしかありません 機種はSHARP Mebius PC-FJ30 OSはWindows98 一番いいのは正常に起動して「楽TV」も使える状態ですが 贅沢は言いません。なんとかインストール前の状態まで復旧できないでしょうか?

  • explorerが異常終了する!

    Windowsを起動すると、ログイン画面が出てきます。 そこでログインすると、explorerが不正な処理を行ったため 強制終了されてしまいます。 詳細ボタンを押すと、以下のようなメッセージが書かれています。 じつはフリーソフトをインストールしている際に、 「このコンピュータの○○は古い、新しくして良いか?」→OK 「今すぐ再起動して良いか」→OK とやった経緯があります。その後、再起動したところ、 以後は何度再起動しても、ログイン後に explorerが異常終了してしまいます。 もう復旧不可能でしょうか? 復旧の仕方がわかる、達人の方、アドバイスをお願い致します!!! もし、もはや復旧不可能ということであれば、 データのバックアップの取り方を教えてください!! それも、不可能ということであれば、…困ってしまいます。。。。 お願いします!! -------------------------- EXPLORERのページ違反です。 モジュール : EXPLORER.EXE、アドレス : 016f:00402541 EAX=00000000 CS=016f EIP=00402541 EFLGS=00010246 EBX=00000001 SS=0177 ESP=005fff1c EBP=005fff24 ECX=c1174f90 DS=0177 ESI=00000000 FS=3077 EDX=005fff2c DS=0177 EDI=00000000 GS=0000 Bytes at CS:EIP: 8b 08 50 ff 11 8b 45 08 50 8b 08 ff 51 08 8b 45 Stack dump: 004024f0 005fff2c 005fff64 0040547c 00000000 00000000 00000000 00000001 00403ab6 0059fc30 81689da8 00000000 00000000 0000ffff 72cd1009 00000001

  • 文字数カウントのJavaScriptについて

    現在プログラムを作成しています。 下記は、文字数をカウントするスクリプトです。 あいうえお と入力した値から「5」文字という 結果が l に入ります。 このプログラムは出来たのですが、 同じように、 I  Love  You という値を入れたら 「3」ワードという結果を l に入れる場合は どうすれば良いのでしょうか? Javaは殆ど知識がありません。 助けてください。 よろしくお願い致します。 <SCRIPT language="JavaScript"><!-- function count(f, val) { var l; if (!val) return; l = val.replace(/\s| /g, ""); f.a01.value = l.length; } //--></SCRIPT>

  • なんで一瞬で処理が終わるの?

    時間を計測するプログラムを書いたのですが、何故か一瞬で処理が終わってしまいます。 #include <stdio.h> #include <time.h> int main(void){ int i,j,a,b=1; clock_t t; t=clock(); for(i=0;i<1000000000;i++){ for(j=0;j<10000000;j++){ a=b; } } printf("%.3f秒\n",(clock()-t)/1000.0); printf("%f %f",clock(),t); return 0; } 実行結果 0.000秒 0.000000 0.000000 なんで0なんでしょうか・・。

専門家に質問してみよう