我不明白,爲什麼for循環是從16到0 如果int是16位的OS, 你應該設置爲循環從15到0, 否則,如果int是在OS 32位, 你應該設置從31環爲0 因此代碼:
int hex2bin (int n)
{
int i,k,mask;
for(i=sizeof(int)*8-1;i>=0;i--)
{
mask = 1<<i;
k = n&mask;
k==0?printf("0"):printf("1");
}
return 0;
}
如果你想顯示任何輸入(如「0×10」,「爲0x4」),可以聲明這樣的功能:
int hex2bin (const char *str)
{
char *p;
for(p=str+2;*p;p++)
{
int n;
if(*p>='0'&&*p<='9')
{
n=*p-'0';
}
else
{
n=*p-'a'+10;
}
int i,k,mask;
for(i=3;i>=0;i--)
{
mask=1<<i;
k=n&mask;
k==0?printf("0"):printf("1");
}
}
return 0;
}
然後,調用HEX2BIN(「0x101」)將得到確切的二進制代碼0x101。
請不要在「C - 」等前加上標題。這就是標籤的用途。 –
下面是用Java編寫的等效函數:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/lang/Integer.java#Integer.toBinaryString%28int %29 –
你的正確輸出(12位)對我來說似乎是錯誤的。如果你只需要12位,把i = 16更改爲1 = 12 – kgiannakakis