最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言格式輸出二進制的2種方法總結

 更新時間:2022年08月11日 10:15:37   作者:IT狼~  
眾所周知C中以八進制,十進制和十六進制都可以通過%o,%d和%x輕松實現(xiàn),然而唯獨沒有提供二進制輸出的快速方式,下面這篇文章主要給大家介紹了關于C語言格式輸出二進制的2種方法,需要的朋友可以參考下

1.前言

在我們日常的編程中,有時候需要格式化輸出一個整形數(shù)據(jù)的二進制,但是在我們C語言中只有

  • 輸出十進制:%d
  • 輸出十六進制:%x;
  • 輸出單個字符:%c;
  • 輸出字符串:%s
  • 輸出變量所在的地址:%p

而并沒有這種二進制對應的格式,所以需要我們手動來實現(xiàn)。

2.源碼實現(xiàn)

本篇博客給大家介紹兩種方法:

1.通過庫函數(shù)itoa,需要包含頭文件:#include <stdlib.h>;

2.通過十進制轉成二進制的常用方法——短除法;

為方便大家使用,將兩種方法都封裝成了函數(shù),源碼如下:

#include <stdio.h>
#include <stdlib.h>

#define uint32 unsigned int
#define uint8 unsigned char

void FuncOutputBin(uint32 value)
{
	char string[33];   //形參類型uint32最大為32位,因此我這里定義了大小為33的字符串數(shù)組存放
	itoa(value, string, 2);  
	printf("庫函數(shù)得到的二進制為:%s\r\n",string);
}

//用短除法的思想得到二進制,之后將數(shù)據(jù)從后往前讀取 
void ShortDivOutputBin(uint32 input)
{
	uint8 temp[33] = {0};  
	int i = 0;
	printf("短除法得到的二進制為:");
	while(input)
	{
		temp[i] = input % 2;	//取余數(shù)存放到數(shù)組中,此為得到的二進制數(shù)
		input = (uint32)input / 2;  //短除,while中判斷是否除盡
		i++;  //存儲了一個二進制數(shù),自加存儲下一個
	}
	for(i--; i>=0; i--)  //由于最后一次input為0無效,i還是自加了,因此最后一次自加的值是無用的,所以先自減,然后將余數(shù)從后往前讀取
    {
		printf("%d",temp[i]);
	}
	printf("\r\n");
}

void main(void)
{
	uint32 input = 0;
	printf("請輸入一個需要轉化為2進制的整形數(shù)據(jù):");
	scanf("%d", &input); 
	FuncOutputBin(input);
	ShortDivOutputBin(input);	
} 

itoa函數(shù)原型:char *itoa( int value, char *string,int radix)
功能:將整形數(shù)據(jù)value轉化成需要的進制radix,然后將之以字符串的形式存放在string中;
返回值:轉化成對應進制后的字符串的地址,也可以不使用返回值;
它的三個參數(shù)依次為:
value:需要轉化的整形數(shù)據(jù);
string:轉化成對應進制后的字符串的地址;
radix :需要轉化的進制(我這里需要轉化為2進制,所以填2);

3.結果展示

(有圖有真相咯~)

附:C語言如何將一個數(shù)字的二進制形式輸出出來

一. 我們知道由十進制轉二進制的算法,因此可以直接計算出其二進制數(shù)

例如:對3求其二進制

int main()
{
	int n = 3;
	int arr[33] = { 0 };//int 型有32個字節(jié)
	int i = 0;
	while (n > 0)
	{
		arr[i] = n % 2;
		++i;
		n /= 2;
	}
	int k = 0;
	for (k = i-1; k >= 0; k--) //逆序輸出
	{
		printf("%d", arr[k]);
	}
	return 0;
}

二. 因為數(shù)字在計算機中就是以二進制的形式存儲的,那我們也可以通過  位運算符  來表示出一個數(shù)的二進制。

用&(按位與)運算符,其運算原理是對其兩個操作數(shù)的計算機內存儲的二進制形式(補碼)的對應位進行按位與,如果1&1結果是1,其他結果都是0。

例如 3&5:

int a = 3;
//a: 00000000000000000000000000000011
 
int b = 5;
//b: 00000000000000000000000000000101
 
int c = a & b;
//c: 00000000000000000000000000000001

因此,可以讓一個數(shù)n&1,然后得到n的二進制的第一位的值(如果結果是1,那n的二進制的第一位也是1,如果是0,那第一位是0),然后讓n右移一位n>>1,然后找其第二位。。。。。。然后一直遍歷到第32位。

int main()
{
	int n = 5;
	int i = 0;
	int arr[33] = { 0 };//int 是有32位的
	//從第一位開始依次取n對應二進制的每一位
	for (i = 1; i <=sizeof(int) * 8; i++)
	{
		arr[i] = n & 1;  
		n=n	>> 1;	 
	}
	//printf("%d\n", i);
	int k = 0;
	//逆序輸出
	for (k = i-1; k >= 1; k--)
	{
		printf("%d", arr[k]);
	}
 
	printf("\n");
	return 0;
}

運算結果:

但是用數(shù)組存,有點麻煩,所以我又改進了一下

int main()
{
	int n = 5;//0000000101
	int i = 0;
	int k = 1 << 31;
 
	for (i = 0; i < sizeof(int) * 8; i++)
	{
		printf("%d", -((n & k) >> 31));
		n <<= 1;
	}
 
	printf("\n");
	return 0;
}

 但是我感覺還是有點麻煩,可又想不出更好的方案了。。。。。。

總結

到此這篇關于C語言格式輸出二進制的2種方法的文章就介紹到這了,更多相關C語言格式輸出二進制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺談c語言中轉義字符的用法及注意事項

    淺談c語言中轉義字符的用法及注意事項

    下面小編就為大家?guī)硪黄獪\談c語言中轉義字符的用法及注意事項。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • C語言中((type *)0) 和(type *0)區(qū)別小結

    C語言中((type *)0) 和(type *0)區(qū)別小結

    ((type *)0)?和?(type *0)?在 C 和 C++ 中有不同的含義和用途,本文主要介紹了C語言中((type *)0) 和(type *0)區(qū)別,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • C語言字符函數(shù)和字符串函數(shù)示例詳解

    C語言字符函數(shù)和字符串函數(shù)示例詳解

    本文詳細介紹了C語言中字符分類函數(shù)、字符轉換函數(shù)及字符串操作函數(shù)的使用方法,并通過示例代碼展示了如何實現(xiàn)這些功能,通過這些內容,讀者可以深入理解并掌握C語言中的字符串處理技巧,感興趣的朋友一起看看吧
    2025-03-03
  • c++中的4種類型轉化方式詳細解析

    c++中的4種類型轉化方式詳細解析

    const_cast該函數(shù)用于去除指針變量的常量屬性,將它轉換為一個對應指針類型的普通變量。反過來,也可以將一個非常量的指針變量轉換為一個常指針變量
    2013-10-10
  • 最長公共子字符串的使用分析

    最長公共子字符串的使用分析

    本篇文章是對最長公共子字符串的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 深入理解C語言中編譯相關的常見錯誤

    深入理解C語言中編譯相關的常見錯誤

    本篇文章是對C語言中編譯相關的常見錯誤進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實現(xiàn)猜數(shù)字大小的游戲

    C語言實現(xiàn)猜數(shù)字大小的游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)猜數(shù)字大小的游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C++內存管理詳解使用方式

    C++內存管理詳解使用方式

    內存管理是C++最令人切齒痛恨的問題,也是C++最有爭議的問題,C++高手從中獲得了更好的性能更大的自由,C++菜鳥的收獲則是一遍—遍的檢查代碼和對C++的痛恨,但內存管理在C++中無處不在,內存泄漏幾乎在每個C++程序中都會發(fā)生,要想成為C++高手,內存管理這關是必須過的
    2022-04-04
  • c++中typename和class的區(qū)別介紹

    c++中typename和class的區(qū)別介紹

    在c++Template中,很多地方都用到了typename與class這兩個關鍵字,而且好像可以替換,是不是這兩個關鍵字完全一樣呢?
    2013-03-03
  • 使用C語言實現(xiàn)字符串逆序操作案例

    使用C語言實現(xiàn)字符串逆序操作案例

    這篇文章主要介紹了使用C語言實現(xiàn)字符串逆序操作案例,本文包含使用C語言的兩種方法去實現(xiàn),遞歸和非遞歸,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07

最新評論

津南区| 青神县| 鄂尔多斯市| 乌拉特中旗| 和平县| 铁岭市| 马尔康县| 高邮市| 肇源县| 马尔康县| 寻乌县| 哈密市| 鞍山市| 福鼎市| 陆良县| 宁波市| 尼木县| 朔州市| 铜山县| 奉贤区| 长子县| 巴彦淖尔市| 徐汇区| 武乡县| 旬邑县| 利川市| 乌兰县| 石阡县| 清流县| 灵寿县| 崇阳县| 应用必备| 延边| 彭山县| 泰兴市| 信宜市| 东明县| 平湖市| 修武县| 河津市| 信丰县|