[問題] 如何印出long型態整數的bit pattern?

看板C_and_CPP作者 (不丹)時間15年前 (2011/01/04 02:10), 編輯推噓3(3013)
留言16則, 7人參與, 最新討論串1/1
以下的函數是我寫的: void longBit(long num){ int i; for(i=63;i>=0;i--){ //long資料型態是8位元組 if(num & 1 << i) printf("1"); else printf("0"); } printf("\n"); } 以這種寫法來印出int和short整數型態的bit pattern會對 但印出long整數型態就不行(印出來前面32bit和後面32bit會重複) 為什麼會這樣? 要如何修改? 謝謝><" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.116.102.100

01/04 02:29, , 1F
你的sizeof(num)是...?
01/04 02:29, 1F

01/04 02:29, , 2F
好奇一問,你跟jimmyoic是同學嗎 XD
01/04 02:29, 2F

01/04 02:39, , 3F
sizeof(num)是8 long整數型態是8位元組
01/04 02:39, 3F

01/04 02:40, , 4F
應該不是同學XD 作業有差
01/04 02:40, 4F

01/04 02:42, , 5F
<< 優先權很低喔, 加上括號吧
01/04 02:42, 5F

01/04 02:43, , 6F
阿...沒想到 & 更低 Orz
01/04 02:43, 6F

01/04 02:45, , 7F
原因出在 i 的型態
01/04 02:45, 7F

01/04 02:48, , 8F
XD
01/04 02:48, 8F

01/04 02:48, , 9F
i的型態=口=?
01/04 02:48, 9F

01/04 02:49, , 10F
i不夠長
01/04 02:49, 10F

01/04 03:06, , 11F
為何i會不夠長? i不是從63遞減到0嗎?
01/04 03:06, 11F

01/04 03:18, , 12F
應該是1和i的型態都是4byte下 1<<i的結果會是4byte吧
01/04 03:18, 12F

01/04 04:49, , 13F
try to print "1 << i" in every iteration and u'll see
01/04 04:49, 13F

01/04 09:59, , 14F
i 沒差吧...主要是那個 1 才對 請改寫 1LL 或 1I64
01/04 09:59, 14F

01/04 10:06, , 15F
樓上提醒才發現被移的是 1 @_@ 不是 i
01/04 10:06, 15F

01/05 13:49, , 16F
改成1LL真的好了@@
01/05 13:49, 16F
文章代碼(AID): #1D8X4FVW (C_and_CPP)