【发布时间】:2018-11-01 07:25:52
【问题描述】:
我已经尝试了一切来解决这个问题,但我不明白我做错了什么。转换为有符号会使所有内容都超过数字十六进制值,我知道如果我有一个整数,我可以直接使用“ULL”来转换它并移位但我不知道
基本上
void tick(unsigned long* tmp) { //input as a parameter
signed long temp = tmp;
printf("%x\n", temp >> 16 & 0xff);
tmp = (signed) temp;
return;
}
编辑:所以我很愚蠢,我应该使用 %lu 而不是 %x,现在我可以看到我的结果,但我看不到时钟发生任何变化,即使对 temp 进行位移
【问题讨论】:
-
首先,初始化
signed long temp = tmp很可疑。其次,对于一些指定的输入,预期和实际输出是多少?请阅读how to ask good questions 和this question checklist。最后学习如何创建Minimal, Complete, and Verifiable Example。 -
这甚至不是有效的 C 语言,也不会干净地编译。
-
你为什么混合指针和非指针,你的意思是
signed long temp = (signed long)*tmp;?如果你想使用tmp的地址使用intptr_t而不是long -
那你为什么要转换成有符号的呢?
-
问题不是你做错了什么,而是你想要达到什么目标?
标签: c long-integer bit-shift unsigned