Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

270
Views
Cómo obtener la posición del bit más a la derecha establecido en C
int a = 12;

por ejemplo: el binario de 12 es 1100, por lo que la respuesta debe ser 3 ya que se establece el tercer bit desde la derecha.

Quiero la posición del último bit más establecido de a archivo . ¿Alguien puede decirme cómo puedo hacerlo?

NOTA : solo quiero posición, aquí no quiero configurar o restablecer el bit. Por lo tanto, no es un duplicado de ninguna pregunta sobre stackoverflow.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Esta respuesta Unset the rightmost set bit indica cómo obtener y desactivar el bit más a la derecha para un entero sin signo o un entero con signo representado como complemento a dos .

obtener el bit más a la derecha ,

 x & -x // or x & (~x + 1)

desarmar el bit establecido más a la derecha ,

 x &= x - 1 // or x -= x & -x // rhs is rightmost set bit

por qué funciona

 x: leading bits 1 all 0 ~x: reversed leading bits 0 all 1 ~x + 1 or -x: reversed leading bits 1 all 0 x & -x: all 0 1 all 0

por ejemplo, sea x = 112 y elija 8 bits por simplicidad, aunque la idea es la misma para todos los tamaños de enteros.

 // example for get rightmost set bit x: 01110000 ~x: 10001111 -x or ~x + 1: 10010000 x & -x: 00010000 // example for unset rightmost set bit x: 01110000 x-1: 01101111 x & (x-1): 01100000
over 4 years ago · Santiago Trujillo Report

0

Encontrar el índice (basado en 0) del bit establecido menos significativo es equivalente a contar cuántos ceros finales tiene un entero dado. Dependiendo de su compilador, hay funciones integradas para esto, por ejemplo, gcc y clang admiten __builtin_ctz . Para MSVC, necesitaría implementar su propia versión, esta respuesta a una pregunta diferente muestra una solución que utiliza los intrínsecos de MSVC.

Dado que está buscando el índice basado en 1, simplemente necesita agregar 1 al resultado de ctz para lograr lo que desea.

 int a = 12; int least_bit = __builtin_ctz(a) + 1; // least_bit = 3

Tenga en cuenta que esta operación no está definida si a == 0 . Además, existen __builtin_ctzl y __builtin_ctzll que debe usar si está trabajando con long y long long en lugar de int .

over 4 years ago · Santiago Trujillo Report

0

Uno puede usar la propiedad del complemento a 2 aquí.
La forma más rápida de encontrar el complemento a 2 de un número es obtener el bit establecido más a la derecha y voltear todo a la izquierda.
por ejemplo: considere un sistema de 4 bits
4=0100
2s complemento de 4 = 1100, que nada más que -4
4&(-4)=0100.
Tenga en cuenta que solo hay un bit establecido y está en el bit establecido más a la derecha de 4
Del mismo modo, podemos generalizar esto para n.
n&(-n) contendrá solo un bit establecido que en realidad está en la posición del bit establecido más a la derecha de n.
dado que solo hay un bit establecido en n&(-n), es una potencia de 2.
Así que finalmente podemos obtener la posición del bit de la siguiente manera:

log2(n&(-n))+1

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!