當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


C語言 showbits()用法及代碼示例


位運算符是在二進製級別對整數和單位進行操作的運算符(就像 +、*、&& 等)。這意味著他們直接查看整數的二進製數字或位。這聽起來很嚇人,但事實上,位運算符非常易於使用且非常有用!但重要的是,您必須了解二進製數和十六進製數。

按位運算符

讓我們看一下不同的按位運算符:

  1. &(按位與)
  2. | (按位或)
  3. 〜(按位非)
  4. ^(按位XOR)
  5. <<(按位左移)
  6. >>(按位右移)
  7. >>>(按位無符號右移)
  8. &=(按位與分配)
  9. | =(按位或分配)
  10. ^ =(按位XOR分配)
  11. << =(按位左移和賦值)
  12. >> =(按位右移和賦值)
  13. >>> =(按位無符號右移和賦值)

在本文中,重點是showbits()函數。讓我們看一下它與按位運算符的關係。

showbits()函數

此函數主要處理按位運算符的概念。讓我們看一下下麵的C程序,以了解showbits()的函數。

C


// C program to demonstrate the
// showbits() function
#include <stdio.h>
void showbits (int n)
{
  int i, k, andmask;
  for (i = 15; i >= 0;i--)
  {
    andmask = 1 << i;
    k = n & andmask;
    k == 0 ? printf ("0"):printf ("1");
  }
}
// Driver code
int main()
{
  showbits(5);   
  return 0;
}
輸出
0000000000000101

解釋

  1. 此函數所做的全部工作都是使用AND運算符和變量andmask。 andmask變量用於檢查各個位的狀態。如果該位為OFF,則打印0,否則打印1。
  2. 第一次通過循環,變量和掩碼將包含值1000000000000000,該值由left-shifting 1(第15位)獲得。
  3. 如果變量n的最高有效位為0,則k將包含一個值0,否則,它將包含一個非零值。
  4. 如果k包含0,則printf()將輸出0,否則將輸出1。
  5. 在循環的第二個go-around上,i的值減小,因此andmask的值改變,現在為100000000000000。這將檢查下一個最高有效位是1還是0,並相應地打印出來。對數字中的所有位重複相同的操作。

如果需要十進製數字的二進製,那麽本質上所有整數在計算機中實際上都是二進製的。隻是將其轉換為一個字符串,該字符串是使用printf和“%d”打印該值時該值的十進製表示。如果需要使用其他基數(例如,基數2或二進製),請提供適當的printf格式字符串(例如,十六進製的“%x”),或者僅構建該字符串並打印出來。

下麵的代碼可以在[2,36]中的任何基數中構建整數的字符串表示形式。

C


// C program to implement the
// above approach
#include <stdio.h>
#include <string.h>
char digits[] =
     "01234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ";
void reverse(char* start, char* end)
{
  for(end--; start < end; start++, end--)
  {
    char t = *start;
    *start = *end;
    *end = t;
  }
}
int base_change(int n,
                int base, char* buffer)
{
  int pos = 0;
   
  if (base > strlen(digits))
    return -1;
  while(n)   
  {
    buffer[pos] = digits[n % base];
    n /= base;
    pos++;
  }
   
  buffer[pos] = '\0';
  reverse(buffer, buffer + pos);
  return 0;
}
// Driver code
int main()
{
  char buffer[32];
  int conv = base_change(1024,
                         2, buffer);
  if (conv == 0)
    printf("%s\n", buffer);
  return 0;
}
輸出
10000000000

說明:函數base_change()顯示任何整數或字符值的二進製表示形式。現在,僅知道base_change()函數顯示整數的二進製等效值就足夠了。


相關用法


注:本文由純淨天空篩選整理自sambhav228大神的英文原創作品 showbits( ) Function in C with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。