1. 两个无符号32位整数,组合成一个无符号64位整数
高位向左移动32位,在后端添加32个0,再与低位做或的运算,形成一个64位数
2. 取高32位数,直接向右移动32位,去掉低32位,得到高32位数
3.
与32个0和32个1的64位数做与运算,得到低32位
4. 打印输出 uint_64, long long 是存储了两个long, 地址相连
输出
1bcdefabcdefcdef
2003520930423229935
1bcdefabcdefcdef
符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输出符举例
-- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u
signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u
unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u
[signed] short [int] 16 -2^15 ~ 2^15-1 %hd
unsigned short [int] 16 0 ~ 2^16-1 %hu、%ho、%hx
[signed] -- int 32 -2^31 ~ 2^31-1 %d
unsigned -- [int] 32 0 ~ 2^32-1 %u、%o、%x
[signed] long [int] 32 -2^31 ~ 2^31-1 %ld
unsigned long [int] 32 0 ~ 2^32-1 %lu、%lo、%lx
[signed] long long [int] 64 -2^63 ~ 2^63-1 %I64d
unsigned long long [int] 64 0 ~ 2^64-1 %I64u、%I64o、%I64x
-- -- float 32 +/- 3.40282e+038 %f、%e、%g
-- -- double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g
-- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg
高位向左移动32位,在后端添加32个0,再与低位做或的运算,形成一个64位数
uint64_t make64(uint32_t high, uint32_t low)
{
return (uint64_t) high << 32 | low;
}
2. 取高32位数,直接向右移动32位,去掉低32位,得到高32位数
uint32_t high32(uint64_t value)
{
return value >> 32;
}
3.
与32个0和32个1的64位数做与运算,得到低32位
uint32_t low32(uint64_t value)
{
//return value & 0-(32)-1(32);
return value & 2^32;
}
4. 打印输出 uint_64, long long 是存储了两个long, 地址相连
long long longint;
longint = 0x1BCDEFABCDEFCDEF; /* 2003520930423229935 */
printf("%x%x\n", *(((int*)(&longint))+1), longint); /* Correct */
printf("%lld\n",longint); /* Correct */
printf("%llx\n",longint); /* Correct */
输出
1bcdefabcdefcdef
2003520930423229935
1bcdefabcdefcdef
符号属性 长度属性 基本型 所占位数 取值范围 输入符举例 输出符举例
-- -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u
signed -- char 8 -2^7 ~ 2^7-1 %c %c、%d、%u
unsigned -- char 8 0 ~ 2^8-1 %c %c、%d、%u
[signed] short [int] 16 -2^15 ~ 2^15-1 %hd
unsigned short [int] 16 0 ~ 2^16-1 %hu、%ho、%hx
[signed] -- int 32 -2^31 ~ 2^31-1 %d
unsigned -- [int] 32 0 ~ 2^32-1 %u、%o、%x
[signed] long [int] 32 -2^31 ~ 2^31-1 %ld
unsigned long [int] 32 0 ~ 2^32-1 %lu、%lo、%lx
[signed] long long [int] 64 -2^63 ~ 2^63-1 %I64d
unsigned long long [int] 64 0 ~ 2^64-1 %I64u、%I64o、%I64x
-- -- float 32 +/- 3.40282e+038 %f、%e、%g
-- -- double 64 +/- 1.79769e+308 %lf、%le、%lg %f、%e、%g
-- long double 96 +/- 1.79769e+308 %Lf、%Le、%Lg