c語言64位
A. 用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;
}
B. C語言如何將64位整數轉字元串
64位整數是指現實中64位的十進制的整數還是什麼?如果是這樣的,就是把現實中64位十進制的整數(因為在計算機中用二進制存儲)轉換為64個ASCII碼顯示在屏幕上。0的ASCII碼是30,1的ASCII碼是31,以此類推。先把整數(除一次之後就是所得的商)多次除以10取余(整數%10),把所得的余數+30賦值給char類型的變數,然後從尾至頭連成字元串(或每得到一次余數就加到已定義的字元串中),就可以輸出了(代碼懶得寫了)
C. 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 進制數。
D. 32位和64位系統,C語言中char,short,int,long,char*,int*,int**各佔多少位元組
1、在32位系統中:
char(1)位元組
short(2)位元組
int(2)位元組
long(4)位元組
char*(4)位元組
int*(4)位元組
int**(4)位元組
2、在64位系統中:
char(1)位元組
short(2)位元組
int(4)位元組
long(8)位元組
char*(4)位元組
int*(4)位元組
int**(4)位元組
(4)c語言64位擴展閱讀
在C++中short佔2位元組,int、float、long都佔4位元組,double佔8位元組。
指針長度和地址匯流排有關。因為指針記錄的就是一個地址,那麼32位的就是4位元組,64位的就是8位元組。
char佔1位元組,short佔2位元組,int、float、long都佔4位元組,double佔8位元組,任意類型的指針都佔4個位元組。
E. C語言如何編譯出64位的可執行文件
可以用dev-cpp 編譯器(64位的版本),可以選擇輸出32或者64位的可執行文件。
F. 怎麼設定64位數據類型,C語言的
根據編譯器不同有以下兩種格式:
定義:long long a;
格式符:%lld // 是兩個 英文小寫字母 'l'
定義:__int64 a; //前面是兩個下劃線
格式符:%I64d //大寫字母 ' I '
比如:
long long a;
scanf("%lld",&a);
或
__int64 a;
scanf("%I64d",&a);
當然輸出格式符也是一樣的!
G. c語言中如何定義64位整數,希望路過的神牛指點
C語言中變數定義語句前面不能有非變數定義語句
C++則可以在需要的時候定義變數
if(n==0) return ;
int t,i;//C語言中這里定義變數是非法的,C++則是合法的
H. C語言在64位系統上怎樣編輯運行
C語言源程序的編譯及運行的關鍵是在於編譯器而不是系統平台。
在64位系統下,如果使用能夠兼容32位的編譯器,那麼編譯的程序就是32位的。當然,對於大多數32位編譯器,都不能很好的在64位系統下運行。這個時候你就需要一個64位的編譯器,比如微軟的Visual C++ 2010及以上版本,下載的時候注意下載x64版本。使用64位編譯器編譯出來的程序就是64位的。
使用64位平台編譯程序的時候需要注意一個問題:
int相關的類型在不同位數機器的平台下長度不同。C99標准並不規定具體數據類型的長度大小,只規定級別。作下比較
(1)16位平台
char 1個位元組8位
short 2個位元組16位
int 2個位元組16位
long 4個位元組32位
指針 2個位元組
(2)32位平台
char 1個位元組8位
short 2個位元組16位
int 4個位元組32位
long 4個位元組
long long 8個位元組
指針 4個位元組
(3)64位平台
char 1個位元組
short 2個位元組
int 4個位元組
long 8個位元組(區別)
long long 8個位元組
指針 8個位元組(區別)
I. c語言,關於64位整數的引用問題
我估計是因為這個數據類型(_int64)在dev c里沒有定義,你可以加一句定義來測:typedef long _int64 ,但在C里,long是佔32位bit的,VC++和JAVA中的long佔64位。標准數據類型裡面是沒有_int64這個數據類型的。
所以你改成這樣,應該就不會有錯了,但前提是dev c中long是佔64位bit(運行一下sizeof(long)看他是不是等於8):
typedef long _int64;
_int64 a;
scanf("%I64d",&a);
printf("%I64d",a);
J. C語言中的64位(VC)
long long 是gnu C/C++中定義的類型,VC不支持
和它相對應的vc類型是__int64,只是輸入輸出沒有g++方便