Я часто желаю, чтобы я мог сделать что-то подобное в c:
val1 &= 0b00001111; //clear high nibble
val2 |= 0b01000000; //set bit 7
val3 &= ~0b00010000; //clear bit 5
Наличие этого синтаксиса кажется невероятно полезным дополнением к C без недостатков, о которых я могу думать, и это кажется естественным для языка низкого уровня, где бит-twiddling довольно распространен.
Изменить: я вижу некоторые другие отличные альтернативы, но все они разваливаются, когда есть более сложная маска. Например, если reg
является регистром, который управляет выводами ввода-вывода на микроконтроллере, и я хочу, чтобы одновременно установить контакты 2, 3 и 7, я мог написать reg = 0x46;
, но мне пришлось потратить 10 секунд думая об этом (и мне, вероятно, придется потратить 10 секунд снова каждый раз, когда я прочитаю этот код после того, как не посмотрю на него в течение дня или двух), или я мог бы написать reg = (1 << 1) | (1 << 2) | (1 << 6);
, но лично я думаю, что это менее понятно, чем просто записывая `reg = 0b01000110; ' Я могу согласиться, что он не масштабируется далеко за пределы 8 бит или, может быть, 16-разрядных архитектур. Не то, чтобы мне когда-либо приходилось создавать 32-битную маску.