您的位置:首页 > 编程语言 > C语言/C++

黑马程序员——c语言基础:进制的转换

2015-05-15 01:44 204 查看
1.计算机中的进制

常见的进制:
1)十进制 0、1、2、3、4、5、6、7、8、9
逢十进一。
2)二进制 0、1
逢二进一。书写形式:需要以0b或0B开头,比如0b101。
3)八进制 0、1、2、3、4、5、6、7
逢八进一。书写形式:前面加个0,比如045。
4)十六进制 0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
逢十六进一。书写形式:在前面加个0x或者0X,比如0x45。

例:定义一个10进制数,打印出对应的10、8、16进制数。

#include <stdio.h>

int main(int argc,
const char * argv[]) {

int a = 13;

printf("%d\n",a);

printf("%o\n",a);

printf("%x\n",a);

return 0;
}

2.原码反码补码的概念
原码:一个数的绝对值的二进制表示,如果是正数,符号位(最高位)为0;如果是负数,符号位改为1。

反码:正数的反码等于它的原码。负数的的反码:除符号位不变,其他位逐位取反。

补码:正数的补码等于它的原码。负数的补码为其反码+1。

注意:
1)一个正数的原码、反码、补码都一样。
2)数据在计算机内部是以补码的形式存储的。

3.位运算符介绍

位运算:用于整数的二进制位之间的运算
&
按位与:如果两个数进行&操作,同1则1,有0则0:
9 & 4
00001001
&00000100
————————————————
00000000
实用技能:要获取一个数的最低位,让这个数和1进行按位&操作。

|
按位或:如果两个数进行&操作,有1则1,同0则0:
9 | 4
00001001
|00000100
————————————————
00001101

~
按位取反:1变0,0变1
~9
00001001
~
————————————————
11110110

^
按位异或:相同为0,不同为1
9 ^ 4
00001001
^00000100
————————————————
00001101

>>右移:各二进制位全部右移n位,低位丢弃,高位补符号位。
一个数右移n位,值等于原值除以2^n
右移位不会改变一个数的正负性。
用途:快速计算一个数除以2的n次方。

<<左移:各二进制位全部左移n位,高位丢弃,低位补0
记忆技巧:向左移动n位,相当于原数*2^n
注意:左移可能会改变一个数的正负性
9 << 2
00001001
<<2
————————————————
00110100

位运算符应用举例:

1)编程实现10进制转2进制

#include <stdio.h>

// 10进制转2进制
void changeTo2(int num){

//
获取长度

int len = sizeof(num) *
8;

int temp;
// 定义变量,存储num移位后的值

int t;
// 定义变量,存储num移位后和1进行按位与操作的结果

//
进制转换

for (int i =
0; i < len; i ++) {
temp = num >> (len -
1 - i); //
右移位

//
移位后和1进行按位与操作
t = temp &
1;

// 打印结果

printf("%d",t);
}
}

int main(int argc,
const char * argv[]) {

changeTo2(63);

return 0;
}

2)用按位与算法判断一个数的奇偶性:

#include <stdio.h>

void jiOuXing(int n){

// n和1进行按位与运算

if (n & 1) {

//
结果为1,则是奇数

printf("是奇数");
}
else {

//
结果为0,则是偶数

printf("是偶数");
}
}
int main(int argc,
const char * argv[]) {

jiOuXing(5);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: