㈠ 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)//数学错误计算处理程序。