int使用 Clang 和unsigned intGCC为 x86_64 编译时会打印以下代码。
我不确定哪个(如果有的话)是正确的。
#include <stdio.h>
struct s {
unsigned int x : 1;
};
template<typename T>
void f(T) {}
template<> void f<int>(int) {
printf("int\n");
}
template<> void f<unsigned int>(unsigned int) {
printf("unsigned int\n");
}
struct s r;
int main()
{
f(0 ? r.x : 0);
}
Run Code Online (Sandbox Code Playgroud)
如果我们用(r.x + 0)两个编译器替换条件,就说类型是有符号的。
C++ 标准部分 expr.cond 有许多转换规则,但似乎没有一个案例涵盖不同类型的泛左值和纯右值之间的转换问题。
是否将无符号位域提升为有符号整数是否由实现定义?
我正在通过“代码来临”挑战来学习 Prolog。
以下是《代码降临 2021》第 7 天的剧透:
目标是:给定一个自然数列表n_1,..., n_k,找到
min_(x\in \N) \sum_i=0^k |x - n_i|
Run Code Online (Sandbox Code Playgroud)
在下面的代码中norm1计算被加数,cost计算给定 处的总和x,并lowest_cost计算所有 s 的最小值x。
norm1(X, Y, N) :- N #= abs(X - Y).
cost(Nums, X, Cost) :-
max_list(Nums, MaxX),
min_list(Nums, MinX),
X in MinX..MaxX,
maplist(norm1(X), Nums, Costs),
sum(Costs, #=, Cost).
lowest_cost(Nums, Cost) :-
cost(Nums, X, Cost)
once(labeling([min(Cost)], [X, Cost])).
Run Code Online (Sandbox Code Playgroud)
一些示例查询:
?- lowest_cost([10,11,12], Cost).
Cost = 2.
?- cost([2,4,6,8], 4, Cost).
Cost = 8. …Run Code Online (Sandbox Code Playgroud)