位運算符是在二進製級別對整數和單位進行操作的運算符(就像 +、*、&& 等)。這意味著他們直接查看整數的二進製數字或位。這聽起來很嚇人,但事實上,位運算符非常易於使用且非常有用!但重要的是,您必須了解二進製數和十六進製數。
按位運算符
讓我們看一下不同的按位運算符:
- &(按位與)
- | (按位或)
- 〜(按位非)
- ^(按位XOR)
- <<(按位左移)
- >>(按位右移)
- >>>(按位無符號右移)
- &=(按位與分配)
- | =(按位或分配)
- ^ =(按位XOR分配)
- << =(按位左移和賦值)
- >> =(按位右移和賦值)
- >>> =(按位無符號右移和賦值)
在本文中,重點是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
解釋
- 此函數所做的全部工作都是使用AND運算符和變量andmask。 andmask變量用於檢查各個位的狀態。如果該位為OFF,則打印0,否則打印1。
- 第一次通過循環,變量和掩碼將包含值1000000000000000,該值由left-shifting 1(第15位)獲得。
- 如果變量n的最高有效位為0,則k將包含一個值0,否則,它將包含一個非零值。
- 如果k包含0,則printf()將輸出0,否則將輸出1。
- 在循環的第二個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()函數顯示整數的二進製等效值就足夠了。
相關用法
- C++ btowc()用法及代碼示例
- C++ wcsspn()用法及代碼示例
- C語言 getdate()、setdate()用法及代碼示例
- C語言 fopen()用法及代碼示例
- C語言 getch()用法及代碼示例
- C語言 Beep()用法及代碼示例
- C語言 pthread_getcpuclockid()用法及代碼示例
- C++ iswprint()用法及代碼示例
- C++ iswgraph()用法及代碼示例
- C++ mbrtoc16()用法及代碼示例
- C++ mbrtoc32()用法及代碼示例
- C++ wmemset()用法及代碼示例
- C++ cauchy_distribution a()用法及代碼示例
注:本文由純淨天空篩選整理自sambhav228大神的英文原創作品 showbits( ) Function in C with Examples。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。