⑴ 為什麼我的代碼會報錯,跟教程一模一樣
簡而言之:和編譯器的標准以及電腦的位數有關御困仿。
教程里的是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個位元組。