位运算符是在二进制级别对整数和单位进行操作的运算符(就像 +、*、&& 等)。这意味着他们直接查看整数的二进制数字或位。这听起来很吓人,但事实上,位运算符非常易于使用且非常有用!但重要的是,您必须了解二进制数和十六进制数。
按位运算符
让我们看一下不同的按位运算符:
- &(按位与)
- | (按位或)
- 〜(按位非)
- ^(按位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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。