(unsigned long)1 和 *(unsigned long *) 是什么意思?
What does (unsigned long)1 and *(unsigned long *) mean?
这是一个打印浮点整数位表示的程序。 *(unsigned long *)a
和 (unsigned long)1
是什么意思?
#include <stdio.h>
void printBits(void *a){
int i;
unsigned long x;
x = *(unsigned long *)a;
for (i = 63; i >= 0; i--){
if ((x & ((unsigned long)1 << i)) != 0)
printf("1");
else
printf("0");
if (i == 63)
printf(" ");
if (i == 62)
printf(" ");
if (i == 52)
printf(" ");
}
printf("\n");
}
int main(void){
double x = -145.4;
printBits(&x);
return 0;
}
两者都是type casts即显式类型转换。
在
x = *(unsigned long *)a;
^
//dereference
(unsigned long *)a
将 a
转换为指向 unsigned long
的指针,然后取消引用它以将其值分配给局部变量 x
.
(unsigned long)1
简单地将 1
转换为 unsigned long
,默认情况下类型为 int
.
第一个是必需的,因为您不能取消引用 void
指针,第二个是为了避免未定义的行为,请参阅 . More details here。
这是一个打印浮点整数位表示的程序。 *(unsigned long *)a
和 (unsigned long)1
是什么意思?
#include <stdio.h>
void printBits(void *a){
int i;
unsigned long x;
x = *(unsigned long *)a;
for (i = 63; i >= 0; i--){
if ((x & ((unsigned long)1 << i)) != 0)
printf("1");
else
printf("0");
if (i == 63)
printf(" ");
if (i == 62)
printf(" ");
if (i == 52)
printf(" ");
}
printf("\n");
}
int main(void){
double x = -145.4;
printBits(&x);
return 0;
}
两者都是type casts即显式类型转换。
在
x = *(unsigned long *)a;
^
//dereference
(unsigned long *)a
将 a
转换为指向 unsigned long
的指针,然后取消引用它以将其值分配给局部变量 x
.
(unsigned long)1
简单地将 1
转换为 unsigned long
,默认情况下类型为 int
.
第一个是必需的,因为您不能取消引用 void
指针,第二个是为了避免未定义的行为,请参阅