⑴ 为什么我的代码会报错,跟教程一模一样
简而言之:和编译器的标准以及电脑的位数有关御困仿。
教程里的是32位系统一个指针占的位数是4位,一个int占的位数也是4位,而在64位系统上一个int占4位,一个指针占8位,编译器的报错提示内容是“将 int* 转换为 int 会损失精度”,也就是int装不下int*里的内容的意思
解决尺档方法:如果要把镇纤指针转为整数请将变量p以及强制类型转换的括号里的int改为long long,(有的long可能就够了,和编译器以及系统位数有关,我64位系统的电脑上的gcc编译器long和int是一样大的,所以用long long保险些)至于为什么会一样大,和c语言规范以及编译器实现有关,类似的有的编译器double和long double也是一样大的,有的又不一样)
代码:
#include <stdio.h>
int main()
{
int i=0;
long long p;
p=(long long)&i;
printf("0x%x\n",p);
printf("%p\n",&i);
return 0;
}
⑵ c语言 当一个数位数超过11位 怎么输入输出
c语言中因数据的存储格式限制,不同类型的数据所能精确表示的数据(整数)位数是有限度的,如:
int 占4字节,有符号最大数为:2^31-1 =2147483647有效数据位简敬运最大为10位。 输入输出格式串为%d
long 在64位编译系统下,占8字节,有符号最大数为:2^63-1=9223372036854775807 (受机器和开发工具限制)有效数据位最大为19位。输入输出格式串为%ld
double 占8字节,有效数据位最大为16位。 输入时,采用%lf格式串,输出时,采用%.0f来去掉小数部分的0
如果操作的数据在以上位数范围内,可选择相应的类型进行数据变量定义。
如果想表达任意长度的整数,则只能采用字符串进行数据存储,输入输出按拦梁字符串进行处理,格式串为%s。如果需要进行相应的算术运算,则需要自定义函数去完成相应的功能。实现过程就是稿塌按四则运算规则,进行相应位的数据计算。详情可查问大数加减法运算资料。
⑶ 易语言如何判断操作系统位数
读冲型环境变量渣兆 (“PROCESSOR_ARCHITEW6432”散梁猜)
AMD64就是x64,64位。
⑷ 16位的机器上面short和int一样长吗
根据规定,
short恒长,肯定是2字节,16位的。
long恒长,肯定是4字节,32位的。
而其他数据类型的长度取决于模袭誉机器/操作系统的位数和编旦段译器的位数。
由于机器/操作系统现在一般都是32位一级以上的,所以主要看编译器的位数。
对于16位编译器(例如TC),int是2字节,16位。short也是2字节,16位。
对于32位编译器(例如VC),int是4字节,32位。short还是2字节禅弯,16位。
MSDN的标准说明如下:
short
The short keyword designates a 16-bit integer.
long
The long keyword designates a 32-bit integer.
⑸ C语言中float和double的区别!
区别:
1、精度不一样,float是单精度,double是双精度;好山
2、表示小数的范围不一样,double能表示的范围比float大;
3、double在内存中,占8个字节,float在内存中,占4个字节。
float:浮点型数据类型,FLOAT 数据类型用于存储单精度浮点数或双精度浮点数。浮点数使用IEEE(电气和电子工程师协会)格式。浮点类型的单精度值具有 4 个字节,包括一个符号位、一个 8 位 二进制指数和一个 23 位尾数。由于尾数的高顺序位始终为 1,因此它不是以数字形式存储的。此表示形式为 float 类型提供了一个大约在 -3.4E+38 ~ 3.4E+38 之间的颤陵范围。
double:双精度浮点型茄袜戚,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译时所占的内存空间依不同的编译器而有所不同,是double float数据类型,C/C++中表示实型变量的一种变量类型。
(5)编译系统位数扩展阅读:
浮点型数据
1、float型
编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。
2、double型
为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字。
3、long double型
不同的编译系统对long double型的处理方法不同,Visual C++6.0对long double型和double一样处理,分配8个字节。
网络-float
网络-double
⑹ C语言 怎么区分当前系统是32位还是64位
32位和64位指的是操作系统的段塌位数,映射到C语言中,最直观的就是指握衡圆针类型占用的字节数。
1 32位系统:
地址占32位,所以指针类型同样占32位,即4字节。
2 64位系统:
地址占64位,所以指针类型同样占64位,即8字节。
于是,拦手只需要判断任意一个指针的sizeof值,即可获取到位数。
如
intmain()
{
intbits=sizeof(char*);
if(bits==4)printf("32位 ");
elseif(bits==8)printf("64位 ");
elseprintf("others,bits=%d ",bits);
}
⑺ 什么是C语言中的精度,与位数有什么差别
系统把一个浮点型数据分成小数部分和指数部分分别存放的,第一位是用来存放符号的,接下来是小数部分,最后是指数部分,而精度指的是小数部或雹分的占的位数。
一个float是32位的,符号占一位,有效数字(即小数部分)占6位,剩下的是指数部分的位数,所以他的最大值可以是3.4E38。
一个double是64位的,符号占一位,有效数字占15位,剩下的是指数部分的位数,所以他的最大值能达到3.4E308
123456.7890000如果是用float类型的话,小数点后面都是无意义的,因为float接脊团戚受7位的,而后面部分已经超过7位了,樱陵不能准确 的表示出来,所以这里的接受是指能正确表达小数的7位有效数字
⑻ Qt判断windows系统的位数,该如何解决
void GetSysBit(bool& bIs32Bit)
{
bIs32Bit = true;
SYSTEM_INFO si;
// Copy the hardware information to the SYSTEM_INFO structure.
GetNativeSystemInfo(&si);
// Display the contents of the SYSTEM_INFO structure.
printf("si.wProcessorArchitecture = %d\nPROCESSOR_ARCHITECTURE_AMD64 = %d\nPROCESSOR_ARCHITECTURE_IA64 = %d\n",
si.wProcessorArchitecture, PROCESSOR_ARCHITECTURE_AMD64, PROCESSOR_ARCHITECTURE_IA64);
if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64 || si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_IA64)
{
bIs32Bit = false;
printf("bIs64Bit\n");
}
else {
bIs32Bit = true;
printf("bIs32Bit\n");
}
}
这是window下的获岁渣取方式(这个用用虚拟机测试可行),使用QT的QSysInfo测试发现获取出来的是编译器使用的亏链位数销雀孙(win7 64位系统下测试)
⑼ 请教C语言高手,以%f形式输出float型的数据,在屏幕上的位数怎么确定
如果就是以%f输出的话,一般困猛编译系统输汪虚桥出六位小数.
如果你在前面加上数字,例如
float
a;
a=3.52;
printf("a=%7.3f",a);
的运行结果为a=
3.520
%7.3f即输出3位誉闷小数,整个数字占7位,如上述程序3.520共5位数字,前面补两个空格.
⑽ C语言基本整型的数据范围什么意思
基本整型变量,所占字节数为2,每个字节等于八位二进制数,可以用0和1表示的八位二进制数,2个字节也就是16位二进制。
最高位表示正负,所以用0和1组成的16位数字范围为-2的15次方~2的15次方,也就是-32768~32767。因此基本整型变量数据范围是-32768~32767。
字节构成信息的一个小单位,并作为一个整体来参加操作,比字小,是构成字的单位。
在微型计算机中,通常用多少字节来表示存储器的存储容量。
例如,在C++的数据类型表示中,通常char为1个字节,int为4个字节,double为8个字节。