Tag: signed

从unsigned long int转换为signed int,反之亦然

我想将一个signed int传递给gsl_rng_uniform_int (const gsl_rng * r, unsigned long int n) 。 我传递的signed int大于或等于零。 该函数将返回一个介于0和n之间的数字,因此如果我传递一个正的signed int,它将返回一个在signed int范围内的数字。 然后我想将返回值存储在signed int中。 用明显的预期行为来做到这一点最简洁的方法是什么? 我在64位Linux机器上使用64位编译器。 更新抱歉,伙计们。 请忽略。 我的代码问题其实在其他地方。 我误解了gdb的输出。

结构变量不会因赋值而改变

struct st { int a1 : 3; int a2 : 2; int a3 : 1; } void main(void) { x.a3 = -1; if (x.a3 == -1) printf(“TRUE\n”); else printf(“FALSE\n”); x.a3 = 1; if (x.a3 == 1) printf(“TRUE\n”); else printf(“FALSE\n”); } 如果是‘x.a3 = -1;’ 首先,如果是真 。 但是,为什么‘x.a3 = 1’在第二个没有变化? 它仍然是x.a3 = -1。 和 如果我输入‘x.a3 = 1;’ […]

将字符串转换为signed int

我想将字符串转换为signed int。 以下是要求。 我已将hex值存储为缓冲区中的字符串。 现在我想将该值转换为signed int。 buf = “fb869e”将其转换为signed int。 所以o / p应该是-293218。 但是当我试图使用strtol进行转换时,我得到的是16483998.所以我该怎么办?

如果我们在C / C ++中添加安全签名/无符号比较,它会破坏语言或现有代码吗?

在阅读了有关签名/未签名比较的问题之后(他们每隔几天我会说出来): 签名/未签名比较和-Wall 我想知道为什么我们没有正确的签名无符号比较,而是这个可怕的混乱? 从这个小程序中获取输出: #include #define C(T1,T2)\ {signed T1 a=-1;\ unsigned T2 b=1;\ printf(“(signed %5s)%d < (unsigned %5s)%d = %d\n",#T1,(int)a,#T2,(int)b,(a<b));}\ #define C1(T) printf("%s:%d\n",#T,(int)sizeof(T)); C(T,char);C(T,short);C(T,int);C(T,long); int main() { C1(char); C1(short); C1(int); C1(long); } 用我的标准编译器(gcc,64bit)编译,我得到这个: char:1 (signed char)-1 < (unsigned char)1 = 1 (signed char)-1 < (unsigned short)1 = 1 (signed char)-1 < (unsigned int)1 = 0 […]