可能重复:
在C中签名为无符号转换 - 它总是安全吗?
假设我声明了unsigned int类型的变量: unsigned int x = -1;
现在-1的二进制补码(假设32位机器)为0xFFFFFFFF.现在,当我将此值赋给x时,值0x7FFFFFFF是否已分配给x?
如果是这样,则printf("%d",x); 会打印十进制等效的0x7FFFFFFF,对吧?但是,显然这没有发生,因为打印的值是-1.我在这里错过了什么?
编辑:我知道我们可以使用%u格式说明符来打印无符号值.但这无助于回答上述问题.
#include<stdio.h>
int main(void) {
int a[3] = {1,2,3};
printf("\n\t %u %u %u \t\n",a,&a,&a+1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Now i don't get why a and &a return the same value, what is the reasoning and the practical application behind it? Also what is the type of &a and could i also do &(&a) ?
我们如何找出哈希表上搜索操作的平均和最差情况时间复杂度,该操作已通过以下方式实现:
假设'N'是需要进行哈希处理的键数.我们采用大小为M的哈希表(M = alpha*N,alpha~0.1).通过以链式链表方式存储密钥来解决冲突,将每个新条目存储在由'hashTable [i]'指向的每个链表的头部.
恕我直言,最好,平均和最坏情况的复杂性可能是O(1),O(N/M)和O(N).如果我错了,请纠正我.将会有一个详细的解释.
以此代码段为例:
union stack {
int a;
float b;
};
union stack overflow;
overflow.a = 5;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我printf("%d",overflow.b);
在gcc和turbo上都得到零.当我这样做时,我printf("%f",overflow.b);
在gcc上得到零,在turbo上得到垃圾.
你能解释一下为什么会这样吗?联合中未使用的变量究竟发生了什么?
如果b
是int
,则printf("%d",overflow.b);
给出值5.这是为什么?
#include<stdio.h>
int main(void) {
int arr[3]={1,2,3};
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在*(&arr)
会给我什么以及为什么?我想要一个详细的解释.不要只告诉我怎么*
和&
抵消:P
我想知道编译器如何解释此表达式以提供所需的结果.