位操作
进制转换
原理见程序设计基础笔记1
用函数实现十进制转二进制
void printBinary(unsigned char dec)//无符号char整型
{
//数组初始化为0
char bits[8] = {0};
int count = 0;
int quotient;
int remainder;
while(dec > 0)
{
remainder = dec % 2;
quotient = dec / 2;
dec = quotient;
bits[count] = remainder;
count++;
}
//逆序输出所有二进制位
for (int i =8 -1; i >=0; i--)
printf("%d", bits[i]);
putchar('\n');
}
逻辑运算符
与&& 3&&5运算结果为真 用1表示
或|| 3||0运算结果为真 用1表示
非!3!运算结构为假 用0表示
位运算符
深入运算对象内部 把运算对象内部的二进制位 根据0或1 看作真或假 再进行逻辑运算
与&
或|
异或^
非~ 一元运算符
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void printBinary(unsigned char dec)
{
//数组初始化为0
char bits[8] = { 0 };
int count = 0;
int quotient;
int remainder;
while (dec > 0)
{
remainder = dec % 2;
quotient = dec / 2;
dec = quotient;
bits[count] = remainder;
count++;
}
//逆序输出所有二进制位
for (int i = 8 - 1; i >= 0; i--)
printf("%d", bits[i]);
putchar('\n');
}
int main()
{
//170是10101010 102是01100110
//与
printf("%hhu\n", 170 & 102);//34
printBinary(170 & 102);//00100010
//或
printf("%hhu\n", 170 | 102);//238
printBinary(170 | 102);//11101110
//异或
printf("%hhu\n", 170 ^ 102);//204
printBinary(170 ^ 102);//11001100
//非
printf("%hhu\n", ~ 170);//85
printBinary(~ 170);//01010101
return 0;
}
左移右移
左移<<
把数据对象内部的二进制全部向左移动指定位 空出来的位置用0填充
printBinary(231);//11100111
printBinary(231 <<1);//11001110
printBinary(231<< 2);//10011100
printBinary(231 <<3);//00111000
右移>>
把数据对象内部的二进制全部向右移动指定位 对于无符号类型 空出来的位置用0填充 对于有符号类型,空出来的位置用O或1填充取决于编译器
printBinary(231);//11100111
printBinary(231 >>1);//01110011
printBinary(231 >>2);/00111001
printBinary(231 >>3);//00011100