這裡蒐索程式師資訊,查找有用的技術資料
當前位置:首頁 » 編程語言 » c語言bitset
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言bitset

發布時間: 2022-05-11 06:03:57

c語言或c++能不能直接使用「比特」

我記得C語言中有一種叫做「位段」的東西,但是不知道現在的編譯器是不是還支持:
struct tag {
unsigned int a :1; //佔一個bit
unsigned int b :7; //佔7個bit
};
這種東西在C++中不一定還支持,而且在現實的計算機中,空間往往不值得費這么大勁,編譯器往往會把兩個位元組的東西優化為四個位元組(為了速度,犧牲空間),更不要說這種計較每個bit的方法了。

如果必須要用,我建議你用位操作。比如 int a; //4個byte,32個bit
a |= 0x03; //把末兩個bit都置為1
a = (a & ~0x00FF) | (b & 0xFF); //把a的低8位置為b的低八位。
等等。。。

㈡ c語言頭文件大全

在安裝C語言程序的文件夾D:\VC98\Include裡面全部都是頭文件,下面是一部分:
#include <assert.h> //設定插入點
#include <ctype.h> //字元處理
#include <errno.h> //定義錯誤碼
#include <float.h> //浮點數處理
#include <fstream.h> //文件輸入/輸出
#include <iomanip.h> //參數化輸入/輸出
#include <iostream.h> //數據流輸入/輸出
#include <limits.h> //定義各種數據類型最值常量
#include <locale.h> //定義本地化函數
#include <math.h> //定義數學函數
#include <stdio.h> //定義輸入/輸出函數
#include <stdlib.h> //定義雜項函數及內存分配函數
#include <string.h> //字元串處理
#include <strstrea.h> //基於數組的輸入/輸出
#include <time.h> //定義關於時間的函數
#include <wchar.h> //寬字元處理及輸入/輸出
#include <wctype.h> //寬字元分類

//////////////////////////////////////////////////////////////////////////

標准 C++ (同上的不再注釋)

#include <algorithm> //STL 通用演算法
#include <bitset> //STL 位集容器
#include <cctype>
#include <cerrno>
#include <clocale>
#include <cmath>
#include <complex> //復數類
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque> //STL 雙端隊列容器
#include <exception> //異常處理類
#include <fstream>
#include <functional> //STL 定義運算函數(代替運算符)
#include <limits>
#include <list> //STL 線性列表容器
#include <map> //STL 映射容器
#include <iomanip>
#include <ios> //基本輸入/輸出支持
#include <iosfwd> //輸入/輸出系統使用的前置聲明
#include <iostream>
#include <istream> //基本輸入流
#include <ostream> //基本輸出流
#include <queue> //STL 隊列容器
#include <set> //STL 集合容器
#include <sstream> //基於字元串的流
#include <stack> //STL 堆棧容器
#include <stdexcept> //標准異常類
#include <streambuf> //底層輸入/輸出支持
#include <string> //字元串類
#include <utility> //STL 通用模板類
#include <vector> //STL 動態數組容器
#include <cwchar>
#include <cwctype>

using namespace std;

//////////////////////////////////////////////////////////////////////////

C99 增加

#include <complex.h> //復數處理
#include <fenv.h> //浮點環境
#include <inttypes.h> //整數格式轉換
#include <stdbool.h> //布爾環境
#include <stdint.h> //整型環境
#include <tgmath.h> //通用類型數學宏
#include<conio.h> 說明調用DOS控制台I/O子程序的各個函數。
#include<sio.h> 包含字元串庫函數說明的頭文件
#include<slib.h> 包含動態存儲與釋放函數頭文件。

㈢ C語言:將一個十進制的正整數轉換為二進制數並輸出結果。

C語言的版本我以前寫過,不過嫌它太丑而且用處不多久沒存檔。
給你一個C++版本的吧!
#include <bitset>
int main()
{
int n = 121; //定義一個整數
bitset<16> bit(121); //16位
cout << bit << endl; //輸出到控制台就是二進制了
}
比較方便吧,就靠bitset類就解決了,何樂而不為呢?

㈣ 標准庫bitset類型的使用疑惑

摘自MSDN:Objects of type string belonging to the C++ template class basic_string<char> are not necessarily null terminated. The null character ' \0 ' is used as a special character in a C-string to mark the end of the string but has no special meaning in an object of type string and may be a part of the string just like any other character. 大意是:字元串類型的對象屬於C++模板類basic_string<char>的實例,沒有必要空終止('\0')。空字元'\ 0'作為C-style字元串的一個特殊字元標記字元串的結尾,但它在一個string類型的的對象沒有特殊的意義,就像任何其他字元一樣作為字元串的一部分。
==================================
空字元『\0』不會被放置到strval之中,strval中只有1100四個字元,你可以嘗試輸出strval的長度,strval.size()結果是4,而不是5,如果是5,就證明『\0』存在strval中,不過這不是事實。因為『\0』在string類型的對象中沒有特殊含義,僅僅會被看作字元串的一部分,不像C風格字元串那樣要以此作為結束標記,strlen()函數計算的長度不包含C風格字元串中'\0',string類型不需要『\0』來標記,因為它自身的實現機制就可以知道在何處結束。

㈤ C語言用數組存儲大型數據的演算法

/*
size_a,pa——指向數組a的有效末端
ma——a的最大容量,必須大於na

n=12——求n的階
p——求階乘時的當前乘數
*/
#include<stdio.h>
#define Ma 10000
int pa;/*指向數組a的有效末端*/
int p=2;
int memory_over=0;
union data
{ unsigned long int b;
struct
{unsigned l:16;
unsigned h:16;
}m;
}a[Ma];
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明1:考慮到result比較長,我用a[Ma].b來存儲n!的result,每一位a[pa].b能存儲4位10進制數字。
因為我定義的數組是靜態的,所以Ma應該足夠大。
ps:其實只用定義一個unsigned long int b[Ma];就可以了(直接用b[pa]代替a[pa].b),但是我考慮到可能會訪問每一結點b[pa]的高16位(a[pa].m.h)和低16位(a[pa].m.l),但是的我考慮是多餘的!!不用像我這樣定義這么復雜的共用體!!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
unsigned int cashe;
unsigned int carry;

void main()
{
unsigned int n;/*求n的階*/
void facto(unsigned int n);
printf("Input n:");
scanf("%u",&n);
/*=================開始求階乘!=============*/
a[0].b=1;/*初始化*/
facto(n);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:上面這句直接調用facto(n)來求n!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*========================以下是顯示最後結果====================================*/
if(memory_over==0)
{printf("the result include %dNO:\n",pa+1);
printf("%u",a[pa--].m.l);
for(;pa>=0;pa--)
printf("%04u",a[pa].m.l);
printf("\n");
}
getch();
}

/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
演算法說明2:求階函數facto(n)說明:
這個函數會不斷地調用multiple(),它的作用是每被調用一次就使得a[pa].b與階數p相乘一次,直到乘完n為止!
{multiple();
p++;/*每一輪乘一個階數p*/
}
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void facto(unsigned int n)
{void multiple();
pa=0;
while(pa<Ma-1&&p<=n)/*容量限制*/
{multiple();
p++;/*每一輪乘一個階數p*/
}
if(p<=n)
{printf("memory out!\n");memory_over=1;}/*如果當前的存儲結果的數組a[Ma]不夠用!應提高Ma*/

}

/*==============================================================================
演算法說明3:乘法函數multiple()說明:負責a[pa].b與階數p相乘。
a[pa].b有很多結點,a[0].b、a[1].b、a[2].b、a[3].b、a[4].b、。。。
當然是從低結點a[0].b開始不斷與p相乘,產生的「進位」加到高位a[1].b,直到a[pa].b*p為止!

隨著結果數值增大,pa個結點的a[].b可能容納不下結果,所以如果a[pa].b與p相乘後還有「進位」carry,就擴大pa,並把carry放入到新增加的結點:
if(carry>0)
a[++pa].b=carry;
===================================================================================*/
void multiple()
{int i=0;
carry=0;
while(i<=pa)/*i指向當前處理的元素a[i],每一輪用一個位與階數p相乘*/
{a[i].b=a[i].b*p+carry;/*計算結果,要考慮來自低位的進位*/
carry=a[i].b/10000;/*計算進位*/
a[i].b=a[i].b%10000;/*計算余數*/
i++;
}
if(carry>0)
a[++pa].b=carry;
}

㈥ c++中有bit變數類型嗎

1、基本數據類型中沒有bit類型。
基本數據類型:
1)整形類型:int ,short int,long int,long long int(C99),char,bool
2)浮點類型:float ,double,雙精度浮點型(float_complex,double_complex,long long_comples)

2、C++中有bitset類型,C/C++中都有位操作,C++中bitset類型,比位操作容易使用。
bitset是C++語言的一個類庫,用來方便地管理一系列的bit位而不用程序員自己來寫代碼。bitset除了可以訪問指定下標的bit位以外,還可以把它們作為一個整數來進行某些統計。

㈦ 能不能給我講講C語言中實數的二進制形式,是怎樣存儲的

實數也就是小數的存儲,小數的存儲是IEEE754標准存儲的,以C語言為例float類型佔32位,double類型佔64位,以float類型來說,這32位的float有1位表示小數的符號,8位表示指數,23位表示底數。換句話說,你可以使用一種叫位域的結構來定義它們。比如

structbit_float{
ints:1;
inte:8;
intm:23
};

如果使用c++則可以使用 bitset的標准類庫模板來進行操作。

㈧ 關於c++的bitset

MSDN上如是說:
bitset(unsigned long val);
The constructor sets only those bits at position j for which val & 1 << j is nonzero.
理解上面的這段話後,
用計算器計算得到:
D(1111) = B(10001010111)
D(1001) = B(1111101001)
D為十進制,B為二進制
而你定義的bitset<4>,只有四位,那麼取1111的二進制的最後四位即0111,得十進制7,同理1001得到1001,即十進制9

ps:對於你上面補充的,我想說如果是bitset<5> (111),那麼這個111是十進制,但是當你變成bitset<5>(00111)或是bitset<5>(0111),那麼這個111是八進制,也就是十進制的73,即1001001,取後面五位即9

再說得細一點,bitset<N>(M)中的N指明內存中的位數,二進制。M指明數的大小,至於這個數的進制,你可以查一下資料,C語言中在一個整數前面加0表示八進制,在一個整數前加0x代表十六進制。

㈨ C語言中的頭文件有多少種都有哪些C函數庫有哪些

iv_t和lldiv_t;宏例如EXIT_FAILURE、EXIT_SUCCESS、RAND_MAX和MB_CUR_MAX等等;

常見的函數有malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等。具體內容可以在編譯器的包含目錄stdlib.h頭文件中打開查看。

為了方便用戶編寫程序,C語言為用戶開發了大量的庫函數,定義在。H文件,用戶可以調用這些函數來實現強大的功能。因此,對於用戶來說,這些函數的使用是提高編程水平的關鍵。

(9)c語言bitset擴展閱讀:

以下內容適用於頭文件

1.對於具有外部存儲類型的標識符,可以在任何其他源程序文件中聲明後引用它們,這樣用戶就可以完全將具有外部存儲類型的標識符的一些聲明放在頭文件中。

2.具體來說,頭文件可以包括用戶構造的數據類型(例如枚舉類型)、外部變數、外部函數、常量和具有一定通用性或公共量的內聯函數。一般的變數和函數定義不應該放在頭文件中。

其他:

雙假設(雙x,雙y);//給定一個直角三角形的兩條邊的長度,求斜邊的長度。

雙ldexp(雙x,int指數);//計算x*(2的指數次方)。

雙poly(Doublex,intdegree,Doublecoeffs[])//計算多項式。

Ntmatherr(structexception*e)//數學錯誤計算處理程序。