一、汇总下Windows和Linux下64位和32位的数据类型的字节长度
数据类型 | windows64 | windows32 | linux64 | linux32 |
char | 8 | 8 | 8 | 8 |
short | 16 | 16 | 16 | 16 |
int | 32 | 32 | 32 | 32 |
long | 64 | 32 | 32 | 32 |
long long | 64 | 64 | 64 | 64 |
size_t | 64 | 32 | 64 | 32 |
pointer指针 | 64 | 32 | 64 | 32 |
注:
1、long类型在win64下是32位。
2、size_t和pointer是系统大小,使用需小心。
二、写一个程序判断当前系统是32位还是64位
boolIsSystem64_1()
{
if(sizeof(void*) == 8)
return true;
else
return false;
}
boolIsSystem64_2()
{
if((void*)(1ll << 63) != 0)
return true;
else
return false;
}
三、阿里在线笔试题目
1.下面代码在64位Linux系统编译执行,输出结果是()。
#include<stdio.h>
#include<stdint.h>
voidprintf_size(int32_t array[10])
{
printf("%d\n",sizeof(array));
}
intmain()
{
int32_tmyArray[10];
printf("%d ",sizeof(myArray));
printf_size(myArray);
return0;
}
结果:64位系统下为40,8。32位系统下为40,4。Linux与Windows均相同
注:第一个sizeof为数组的实际大小,第二个sizeof为指针大小(与系统位数有关)。
2.以下程序在32位机器上运行输出是()。
#include
<iostream>
using
namespace
std
;
class
animal
{
protected
:
int
age
;
public
:
virtual
void
print_age
(
void
) = 0;
};
class
dog
:
public
animal
{
public
:
dog
() {
this
->
age
= 2; }
~
dog
() {}
virtual
void
print_age
(
void
) {
cout
<<
"Wang,my age="
<<
this
->
age
<<
endl
;}
};
class
cat
:
public
animal
{
public
:
cat
() {
this
->
age
= 1;}
~
cat
() {}
virtual
void
print_age
(
void
) {
cout
<<
"Miao,my age="
<<
this
->
age
<<
endl
;}
};
int
main
()
{
cat
kitty
;
dog
jd
;
animal
*
pa
;
int
*
p
= (
int
*)(&
kitty
);
int
*
q
= (
int
*)(&
jd
);
p
[1] =
q
[1];
pa
= &
kitty
;
pa
->
print_age
();
return
0;
}
结果:32位下为"Miao,my age=2",64位下为"Miao,my age=1"。