Ⅰ C语言中,64位无符号整型如何进行开方运算
简单办法,转double, 再开方。
你的编译器要能全面支持64位无符号整型才行。例如支持 强制转化 unsigned _int64 为 double.
#include<stdio.h>
#include<math.h>
int main(void){
// unsigned _int64 x; // 我的编译器支持 支持unsigned
signed _int64 x;
double y;
printf("input x in hex 0x100:\n");
scanf("%I64x", &x); // 按16进制格式输入。
printf("x=%I64d\n", x); // 按10进制格式输出。
y = (double) x; // 我的编译器支持 signed _int64 转double, 不支持unsigned 转double
printf("y=%lf\n",sqrt(y)); // 开平方
return 0;
}
-----
scanf("%I64d", &x); // 按10进制格式输入。
============
实际上,double 只有 52 bits 精度,unsigned _int64 会有截断误差。
而 math.h 的sqrt 不支持 unsigned _int64。
也许可以自己编一个迭代 程序,假定 unsigned _int64 y 是平方根,用
(x - y * y ) 趋进 0 的方法 迭代 出 y -- 好像不难。达到 y 精度 为 1。
下面是设想,尚无时间验证:
#include<stdio.h>
#include<limits.h>
#include<math.h>
int main(void){
unsigned _int64 x,y,y1,y2;
signed _int64 xs;
double z;
printf("max signed _int64 is %I64x\n", _I64_MAX);
printf("max unsigned _int64 is %I64x\n", _UI64_MAX);
printf("input x in hex 0x100:\n");
scanf("%I64x", &x);
printf("x=%I64x\n", x);
if (x <= _I64_MAX){
xs = x;
z = (double) xs;
printf("y=%lf\n",sqrt(z));
} else {
for (y=0;y< 0xffffffff;y=y+0xff) {
if (y*y <= x) y1=y;
if (y * y > x) {y2=y; break;}
}
for (y=y1;y<=y2;y=y++) {
if (y*y <= x) y1=y;
if (y*y > x) {y2=y; break;}
}
printf("y1=%I64x y2=%I64x\n",y1,y2); // 输出
}
return 0;
}
输入数小于0x7fffffffffffffff 用 double
大于 0x7fffffffffffffff 用 y*y -x
输入输出 用 16 进制数。
Ⅱ C++中,64位计算机整型,短整型,长整型分别占几个字节
123456789101112131415#include <iostream> int main(void){ int a = 0; short b = 0; long int c = 0; std::cout<< sizeof(a)<<std::endl<< sizeof(b)<<std::endl<< sizeof(c)<<std::endl; return 0;}
4
2
4(根据系统及编译器的不同会有差别)
虽然这是基础,但自己想办法解决的能力也是很重要的
Ⅲ 在程序中想定义一个64位的整形变量,但是设备中有32位的有64位的
看你想移植的平台是什么样了,windows 或者ubuntu 32位或者64位,在程序里设置宏定义判断当前平台的结果,根据结果来选择你定义的数据类型。
Ⅳ 64位无符号整型表示的最大二进制数是多少
Ⅳ 如何将两个32位整型数,合并成一个64位整型数
用减法实现除法
低32位直接相减
得出的结果进行计数,累加为低32位的
高32位用借位,每借位倍数累加
转化成字符串 合并字符串
再将字符串转化为64位浮点数或者长整型数
再计算
Ⅵ 用c语言实现大整形运算,64位长整型的加减法,输入限制为64位长度整数
#include<stdio.h>
#include<string.h>
#define N 1005
int main()
{
char str1[N],str2[N];
int num1[N],num2[N],t,len1,len2,i,j,max;
scanf("%d",&t);//测试t组数据,减法就不写了
getchar();
while(t--)
{
memset(str1,0,sizeof(str1));
memset(str1,0,sizeof(str2));
memset(num1,0,sizeof(num1));
memset(num2,0,sizeof(num2));
scanf("%s",str1);//输入第一个数,这个1000位整数相加也没问题,上面自己改长度
scanf("%s",str2);//输入第二个数,因为没有太长的数据类型,用字符串表示大整数
len1=strlen(str1);
len2=strlen(str2);
max=len1>len2?len1:len2;
j=0;
for(i=len1-1; i>=0; i--) //这里注意啊,倒着转换,但是num1是正向存每一位的
{
num1[j]=str1[i]-'0'; //转换成数字一个一个存到数组里面
j++;
}
j=0;
for(i=len2-1; i>=0; i--)
{
num2[j]=str2[i]-'0';
j++;
}
for(i=0; i<max; i++) //一位一位相加
{
num2[i]+=num1[i]; //加到num2数组中
if(num2[i]>=10) //大于10进位
{
num2[i]-=10;
num2[i+1]+=1;
}
}
if(num2[max]==1)
printf("%d",num2[max]);
for(i=max-1; i>=0; i--) //这样就把大整数的每一位算出来了,顺序输出就好
printf("%d",num2[i]);
printf("\n");
}
return 0;
}
Ⅶ 在c语言中,Int是32位整数还是64位整数,那么在tc中到底是多少位啊
这是一个误倒人的地方。我到大二下半学期才明白。在唐浩强的C语言程序里写的INT型是16位。但是在VS 2008编程的时候发现int有32位和64位。在我使用KEIL编51单片机的时候发现INT超过16位没事,超过32位才有事。所以猜想所谓的INT 16位是不对的 是可以设计的 跟编译器和硬件有关系 不是定死的。
Ⅷ 整型数据在64位计算机中占几个字节
几位都是CPU寄器的宽度。。
8位等于一个字节。。
64位的意思就是说,CPU一次可以传输8个字节 。。