Ⅰ 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個位元組 。。