Ⅰ c語言的二進制數值如何直接輸出
C標准沒有輸出二進制的,不過用itoa()可以實現到二進的轉換
可以使用itoa函數把變數的數值轉換成2進制字元串,再用輸出函數輸出。
用 法:char *itoa(int value, char *string, int radix);
詳細解釋:itoa是英文integer to array(將int整型數轉化為一個字元串,並將值保存在數組string中)的縮寫.
參數:value: 待轉化的整數。
radix: 是基數的意思,即先將value轉化為radix進制的數,范圍介於2-36,比如10表示10進制,16表示16進制。
* string: 保存轉換後得到的字元串。
返回值:char * : 指向生成的字元串, 同*string。
備注:該函數的頭文件是"stdlib.h"
Ⅱ c語言: 編寫遞歸函數把輸入的一個負整數轉換成二進制輸出
根據評論要求,改進代碼:
1、函數getBCode是題目要的遞歸函數,實現轉二進制(最高位是符號位)。
思路是十進制數絕對值除以2求余,得到反向二進制原碼,反向創建鏈表保存結果,最終得到的單向鏈表就是完整二進制數原碼,之後根據正負性,負數取反+1。鏈表頭添加符號位。
2、函數freeBny為釋放鏈表,如要重復調用函數getBCode,每次調用需調用一次freeBny。
3、函數showBny是列印輸出,為對齊顯示,按4的倍數位列印,高位補齊的位數值均與符號位一致。
#include <stdio.h>
#include <malloc.h>
#include <math.h>
typedef struct binary//成員用char類型保存數值,不是'1'或'0'的ASCII碼
{
char b;//一位二進制數0或1
struct binary *next;
}BNY;
BNY *getBCode(int n);//獲得二進制數(最高位是符號位)
void showBny(BNY *bnyHead);//對齊列印二進制數(保證是4的倍數)
void freeBny(BNY *bnyHead);//釋放二進制數鏈表空間
int main()
{
int n;
BNY bny,*bnyHead=&bny;
while(1)
{
printf("請輸入一個整數:"),scanf("%d",&n);
bnyHead->next=getBCode(n);
printf("轉為二進制數:"),showBny(bnyHead);
freeBny(bnyHead);
printf(" ");
}
return 0;
}
void freeBny(BNY *bnyHead)
{
BNY *prev=NULL,*bny=NULL;
bny=bnyHead->next;
while(bny)
{
if(prev) prev->next=NULL,free(prev),prev=NULL;
prev=bny;
bny=bny->next;
}
bnyHead->next=NULL;
}
void showBny(BNY *bnyHead)
{
int i,f=-1,len=0,n=0;
BNY *bnySave=bnyHead;
while(bnyHead->next)
{
if(f==-1) f=bnyHead->next->b;
len++;
bnyHead=bnyHead->next;
}
if(len%4)
n=4-len%4;
for(i=0;i<n;i++)printf("%d",f);
bnyHead=bnySave;
while(bnyHead->next)
{
printf("%d",bnyHead->next->b);
n++;
if(n==4)printf(" "),n=0;
bnyHead=bnyHead->next;
}
}
BNY *getBCode(int n)
{
int s,y;
static BNY*bnyPrev=NULL;
static int cy=0,f=-1;//加1進位用
if(f==-1 && n>=0)f=1;
if(f==-1 && n<0)f=0,cy=1;
n=abs(n);
BNY *bnyNew=NULL;
s=n/2,y=n%2;
bnyNew=(BNY *)malloc(sizeof(BNY));
if(!bnyNew) return NULL;
bnyNew->b=y;
// 如是負數,直接取反+1
if(!f) bnyNew->b=!(bnyNew->b);//從最低位開始,負數取反
if(cy)bnyNew->b=bnyNew->b+cy,cy=0;//負數+1
if(bnyNew->b>1)bnyNew->b=0,cy=1;
bnyNew->next=NULL;
if(bnyPrev) bnyNew->next=bnyPrev;
bnyPrev=bnyNew;
n=s;
if(n==0)
{
bnyNew=(BNY *)malloc(sizeof(BNY));//添加符號位
if(!bnyNew) return NULL;
if(!f)
bnyNew->b=1;
else
bnyNew->b=0;
bnyNew->next=bnyPrev;
bnyPrev=NULL;
cy=0,f=-1;
return bnyNew;
}
return getBCode(n);
}
Ⅲ C語言中怎樣輸出一個二進制的數
//我們用按位運算符:右移>>和按位運算符與^,這兩個功能就可以實現。
#include<stdio.h>
voidprintBinary(intnumber);//這是聲明一個自定義的函數,讓編譯器知道我們造了一個這么個函數,功能:將整數以二進制形式輸出。
intmain()
{
printBinary(22);//括弧裡面可以填上你要輸出的整數,比如要輸出22的二進制形式
return0;
}
voidprintBinary()//自定義一個函數printBinary
{
inttemp=sizeof(number)-1;//定義一個變數:如果你的編譯器是32位的,也就是inttemp=31;
while(temp>=0)//temp是循環的次數,不需要糾結判斷是>=還是>,寫完之後檢驗一下就知道哪個對了。
intvalue=number>>temp^1;//a>>temp。temp移動後,是把這個整數的二進制形式中最後一位,依次與1進行按位與運算。假如temp=31,就是把這個整數的二進制形式右移31位,只剩下了這個整數的二進制形式的開頭第一個數字,然後與1進行按位與運算。真則為1,假則為0。
printf("%d",value);//每次輸出整數的二進制形式的一個數字,從開頭開始輸出。.
temp--;//按位右移循環,直到把整數內存中所有的位移完畢。從內存中二進制形式的第一位開始。
}
Ⅳ C語言中怎麼輸出數據的二進制
二進制數不能像十進制那樣%d直接輸出。
如果想輸出一個數的二進制可以通過函數把其轉成2進制字元串再將其輸出。
itoa函數
原型:char*itoa(intvalue,char*string,intradix);
參數:int value 被轉換的整數,char *string 轉換後儲存的字元數組,int radix 轉換進制數,如2,8,10,16 進制等
功能:將任意類型的數字轉換為字元串。在<stdlib.h>中與之有相反功能的函數是atoi。
參考代碼:
1、
#include<stdlib.h>
#include<stdio.h>
intmain(void)
{
intnumber=10;
charstring[25];
itoa(number,string,2);
printf("十進制數:%d,二進制數:%s ",number,string);
return0;
}
/*
十進制數:10,二進制數:1010
*/
2、
voidprint_bin(intn)
{
intl=sizeof(n)*8;//總位數。
inti;
if(i==0)
{
printf("0");
return;
}
for(i=l-1;i>=0;i--)//略去高位0.
{
if(n&(1<<i))break;
}
for(;i>=0;i--)
printf("%d",(n&(1<<i))!=0);
}
Ⅳ c語言以二進制輸出
#include<stdlib.h>
#include<stdio.h>
voidmain(){
intnumber=43;charstring[100];
itoa(number,string,2);
printf("原數=%d二進制數=%s ",number,string);
}
這個可以滿足你嗎?讓程序輸出反碼補碼好像要求有點高。你根據我寫的程序自己算一下反碼補碼並不是一件很難的事。
Ⅵ 在C語言中怎麼把一個數轉換成二進制然後輸出
數據在內存中本來就是以二進制補碼存放的,設法從高位元組至低位元組一個bit一個bit地輸出到屏幕上即可。根據題面要求,輸出過程還要做以下工作:
從最高位元組開始檢測,全0的位元組略去;
每8位增加輸出一個空格。
代碼如下:
12345678910111213141516//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"int main(void){ char *p; unsigned i,n,x=1<<sizeof(int)*8-1; printf("Input an integer...\n"); scanf("%d",&n); for(p=(char *)&n,i=sizeof(int)-1;i>0;i--) if(*(p+i)==0) x>>=8; else break; for(i=0;x;x>>=1) printf(++i%8 ? "%d" : "%d ",(n&x) || 0); printf("\n"); return 0;}
Ⅶ 將用戶輸入字元串轉化2進制並輸出(c語言)
不知道你說的是針對數字的轉換成2進制還是說所有的字元串轉成2進制,以下代碼針對所有的字元串:
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
int
main(int
argc,
char
*
argv[])
{
char
input[1024];
scanf("%s",
input);
char
c;
int
len
=
strlen(input);
char
*
output
=
new
char[len
*
8
+
1];
memset(output,
(int)'0',
len
*
8
+
1);
char
tempBuff[9];
for(int
i
=
0;
i
<
1024;
i++)
{
c
=
input[i];
if(c
==
0)
break;
itoa((int)c,
tempBuff,
2);
strcpy(output
+
(i
*
8)
+
(8
-
strlen(tempBuff)),
tempBuff);
output[(i
+
1)
*
8]
=
'0';
}
output[len
*
8]
=
0;
printf(output);
delete
[]
output;
return
0;
}
如果是做數字的轉換,參考一下,為經測試:
#include
<stdio.h>
#inlcude
<stdlib.h>
int
main()
{
int
n;
scanf("%d",
&n);
char
temp[1024];
atoi(n,
temp,
2);
printf(temp);
return
0;
}
Ⅷ 如何在c語言中輸出二進制數
二進制是不可以直接輸出的,但是可以用程序輸出
#include<stdio.h>
void
f(int
n)
{
if(n)
f(n/2);
else
return;
printf("%d",n%2);
}
int
main()
{
int
n;
while(1)
{
scanf("%d",&n);
if(n<0)
break;
if(n==0)
printf("0");
f(n);
printf("\n");
}
return
0;
}
Ⅸ 怎麼用c語言輸出二進制碼
在C語言的標准輸出中,有16進制,10進制和8進制的輸出格式,但是沒有二進制的輸出格式。所以要想輸出二進制,只能靠自己寫函數進行輸出了。
基本思想為通過移位操作+與操作取出各個位上的值,然後對其進行輸出即可。
以32位無符號整型數據二進制輸出為例,代碼如下:
#include<stdio.h>
voidbinary_print(unsignedintv)
{
inti;
intbit;
intsize=sizeof(v)*8;
//這里的size是輸入參數v的位數,直接用32代替也可以,但寫成sizeof(v)*8這樣更為通用。
for(i=0;i<size;i++)
{
bit=v&(1<<(size-i-1));//提取出第i位的值
if(bit==0)putchar('0');
elseputchar('1');
}
}
Ⅹ 將任意兩個十進制數轉換為二進制數並輸出的C語言代碼
#include<stdio.h>
#include<string.h>
#include<stdlib.h>//itoa所需頭文件
int
main()
{
char
str1[20],str2[20];
int
n,m;
scanf("%d%d",&n,&m);//n,m為0或正整數
itoa(n,str1,2);//itoa的第三個參數用於將數字轉換成不同的進制,這邊是二進制
itoa(m,str2,2);//將結果以字元形式存放在字元數組str1/str2中
printf("%s
%s\n",str1,str2);//直接輸出
return
0
;
}