Компиляторы C не любят, когда вы пытаетесь присвоить константные значения L-значению, которое недостаточно велико для их хранения.Я предполагаю, что авторы компилятора предполагают, что вы знаете, какое значение следует использовать, поскольку вы объявляете константу, поэтому что-то должно быть не так, если вы потенциально усекаете ее значение.Вот решение, которое будет работать, но не может быть вашим идеальным результатом:
typedef unsigned short U16;
U16 mask;
mask = 0x7fff; //~0x8000;