/*
** Bit set, clear, and test operations
**
** public domain snippet by Bob Stout
*/
typedef enum {ERROR = -1, FALSE, TRUE} LOGICAL;
#define BOOL(x) (!(!(x)))
#define BitSet(arg,posn) ((arg) | (1L << (posn)))
#define BitClr(arg,posn) ((arg) & ~(1L << (posn)))
#define BitTst(arg,posn) BOOL((arg) & (1L << (posn)))
#define BitFlp(arg,posn) ((arg) ^ (1L << (posn)))
хорошо, давайте проанализируем вещи...
общее выражение, с которым у Вас, кажется, есть проблемы во всех них," (1L < < (posn))". Все это делает, создают маску с единственным битом на и который будет работать с любым целым типом. "posn" аргумент определяет положение, где Вы хотите бит. Если posn == 0, то это выражение оценит к:
0000 0000 0000 0000 0000 0000 0000 0001 binary.
, Если posn == 8, это оценит к:
0000 0000 0000 0000 0000 0001 0000 0000 binary.
, Другими словами, это просто создает поле 0 с 1 в указанном положении. Единственная хитрая часть находится в BitClr () макрос, где мы должны установить единственные 0 битов в поле 1's. Это выполняется при помощи 1's дополнение того же выражения, как обозначено тильдой (~) оператор.
, Как только маска создается, она относилась к аргументу, как Вы предполагаете, при помощи поразрядного и (&), или (|), и xor (^) операторы. Так как маска имеет тип долго, макросы будут работать точно также над символом, short's, интервалом или long's.
нижняя строка - то, что это - общее решение всего класса проблем. Это является, конечно, возможным и даже соответствующим переписать эквивалент какого-либо из них, макросы с явной маской оценивают каждый раз, когда Вам нужно один, но почему делают это? Помните, макроподстановка происходит в препроцессоре и таким образом, сгенерированный код отразит то, что значения считает постоянными компилятор - т.е. столь же эффективно использовать обобщенные макросы для "перестраивания колеса", каждый раз необходимо сделать побитовую обработку.
Неубежденный? Вот некоторый тестовый код - я использовал Watcom C с полной оптимизацией и не используя _cdecl, таким образом, получающееся дизассемблирование будет максимально чистым:
----[TEST.C]----------------------------------------------------------------
#define BOOL(x) (!(!(x)))
#define BitSet(arg,posn) ((arg) | (1L << (posn)))
#define BitClr(arg,posn) ((arg) & ~(1L << (posn)))
#define BitTst(arg,posn) BOOL((arg) & (1L << (posn)))
#define BitFlp(arg,posn) ((arg) ^ (1L << (posn)))
int bitmanip(int word)
{
word = BitSet(word, 2);
word = BitSet(word, 7);
word = BitClr(word, 3);
word = BitFlp(word, 9);
return word;
}
----[TEST.OUT (демонтированный)] [конец]-----------------------------------------------
Module: C:\BINK\tst.c
Group: 'DGROUP' CONST,CONST2,_DATA,_BSS
Segment: _TEXT BYTE 00000008 bytes
0000 0c 84 bitmanip_ or al,84H ; set bits 2 and 7
0002 80 f4 02 xor ah,02H ; flip bit 9 of EAX (bit 1 of AH)
0005 24 f7 and al,0f7H
0007 c3 ret
No disassembly errors
--------------------------------------------------------------------
Похоже, ваш синтаксис HTML неверен для ячейки таблицы. Прежде чем вы попробуете другую идею, описанную ниже, убедитесь, работает она или нет ... Вы также можете попробовать добавить это в свою таблицу: table-layout: fixed ...
<td style="overflow: hidden; width: 280px; text-align: left; valign: top; whitespace: nowrap;">
[content]
</td>
Новый HTML
<td>
<div class="MyClass"">
[content]
</div>
</td>
Класс CSS:
.MyClass{
height: 280px;
width: 456px;
overflow: hidden;
white-space: nowrap;
}
<table border="1" width="183" style='table-layout:fixed'>
<col width="67">
<col width="75">
<col width="41">
<tr>
<td>First Column</td>
<td>Second Column</td>
<td>Third Column</td>
</tr>
<tr>
<td>Row 1</td>
<td>Text</td>
<td align="right">1</td>
</tr>
<tr>
<td>Row 2</td>
<td>Abcdefg</td>
<td align="right">123</td>
</tr>
<tr>
<td>Row 3</td>
<td>Abcdefghijklmnop</td>
<td align="right">123456</td>
</tr>
</table>
Я знаю, что это старая школа, но попробуйте, это работает.
может также захотеть добавить это:
<style>
td {overflow:hidden;}
</style>
Конечно, вы бы поместили это в отдельную ссылку таблица стилей, а не встроенная ... не так ли;)