Почему мой союз не показывает правильные значения?

Вы можете использовать ClickableSpan , как описано в этой записи

Пример кода:

TextView myTextView = new TextView(this);
String myString = "Some text [clickable]";
int i1 = myString.indexOf("[");
int i2 = myString.indexOf("]");
myTextView.setMovementMethod(LinkMovementMethod.getInstance());
myTextView.setText(myString, BufferType.SPANNABLE);
Spannable mySpannable = (Spannable)myTextView.getText();
ClickableSpan myClickableSpan = new ClickableSpan() {
   @Override
   public void onClick(View widget) { /* do something */ }
};
mySpannable.setSpan(myClickableSpan, i1, i2 + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Ссылка

13
задан Stephen 23 August 2011 в 15:54
поделиться

3 ответа

Объединение не является структурой . В объединении все данные занимают одно и то же пространство и могут рассматриваться как разные типы через имена полей. Когда вы назначаете true для x.b , вы перезаписываете младшие биты 20000 .

Более конкретно:

20000 в двоичном формате: 100111000100000

19969 в двоичном формате: 100111000000001

Здесь произошло то, что вы поместили однобайтовое значение 1 (00000001) в 8 младших битов 200000.

Если вы используете struct вместо union , у вас будет место как для int , так и для bool , а не просто int , и вы увидите ожидаемые результаты.

31
ответ дан 1 December 2019 в 19:07
поделиться

В объединении все члены данных начинаются с одной и той же области памяти. В вашем примере вы можете использовать только один член данных за один раз. Однако эта возможность может быть использована для некоторых изящных трюков, например, для предоставления одних и тех же данных несколькими способами:

union Vector3
{
  int v[3];
  struct
  {
    int x, y, z;
  };
};

Что позволяет вам получить доступ к трем целым числам либо по имени (x, y и z), либо как к массиву (v).

3
ответ дан 1 December 2019 в 19:07
поделиться

Союз хранит только одного члена в любой момент времени. Чтобы получить определенные результаты, вы можете прочитать только один и тот же член из объединения, которое было записано последним в объединение. Поступление иначе (как вы здесь) официально не дает ничего, кроме неопределенных результатов.

Иногда объединения намеренно используются для обозначения типов (например, для просмотра байтов, составляющих число с плавающей точкой). В этом случае вам решать, что вы получаете. Язык вроде как пытается дать вам шанс, но не может гарантировать многого.

3
ответ дан 1 December 2019 в 19:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: