进制
什么是进制
是一种计数的方式,数值的表示形式
多种进制:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有4种表示方式
%d\%i 十进制形式输出整数
%c 输出字符
%p 输出地址
%f 输出小数
%o 八进制形式输出整数
%x 十六进制形式输出整数
默认情况下,就是十进制 ->int number = 12);
二进制(0b或者0B开头) ->int number2 = 0B1100;
八进制(0开头) ->int number3 = 014;
十六进制(0x或者0X开头) ->int number4 = 0xc;
二、进制转换:
1.二进制转十进制
0b1100 = 0 * 2的0次方 + 0 * 2的1次方 + 1 * 2的2次方+ 1 * 2的3次方
2.十进制转二进制
67 = 64 + 2 + 1 = 2的6次方 + 2的1次方 + 2的0次方
3.n位二进制的取值范围
2位二进制位的取值范围:0~3 0~2的2次方-1
3位二进制位的取值范围:0~7 0~2的3次方-1
n位二进制位的取值范围:0~2的n次方-1
拓展:输出一个整数的二进制存储形式
<span style="color:#333333;">void printBinary(int number)
{
// 记录现在挪到第几位
// (sizeof(number)*8) - 1 == 31
int temp = ( sizeof(number)<<3 ) - 1;
while ( temp >= 0 )
{
// 先挪位,再&1,取出对应位的值
int value = (number>>temp) & 1;
printf("%d", value);
//
temp--;
// 每输出4位,就输出一个空格
if ( (temp + 1) % 4 == 0 )
{
printf(" ");
}
}</span>
三、 类型说明符 :
int 4个字节 %d
short 2个字节 %d
long 8个字节 %ld
long long 8个字节 %lld
signed和unsigned的区别:
signed 最高位要当做符号为
unsigned 最高位不要当做符号位
signed == signed int
signed 有符号 : 正数、0、负数
signed int a = 10;
signed a2 = 10;
unsigned == unsigned int
unsigned 无符号 : 0、正数
四、内存存储细节:
一个int类型数据占据4个字节、32bit
0000 0000 0000 0000 0000 0000 0000 1100
int number = 12; // 1100
0000 0000 0000 0000 0000 0000 0000 1101
int number2 = 13; // 1101
补充:bit 比特位:0或1 是 比特位
Byte 字节
1 Byte = 8 bit
1 KB = 1024 B
1GB = 1024MB = 1024*1024KB = 1024*1024*1024B
在32位和64位编译器
int 占用4个字节
float 占用4个字节
char 占用1个字节
double 占用8个字节
五、位运算
按位与 & 按位或 | 按位异或 ^ 按位取反 ~ 左移 << 右移 >>
案例:1.用位异或调换变量值
a^b^a == a^a^b == 0^b == b
a = a ^ b;
b = a ^ b;
a = a ^ b;
2.用位于&运算符判断变量的奇偶性
<pre name="code" class="objc">int main()
{
int a = 15;
// a&1 == 1 // 奇数
// a&1 == 0 // 偶数
// (a&1) == 0?printf("偶数\n"):printf("奇数\n");
(a&1) == 1?printf("奇数\n"):printf("偶数\n"); // 注意a&1需要括号括起来
/*
if (a%2=) {
printf("奇数\n");
} else {
printf("偶数\n");
} */
// a%2==0?printf("偶数\n"):printf("奇数\n");
// a%2?printf("偶数\n"):printf("奇数\n");
return 0;
}
char的用法
ASCII单字节表(双字节GBK\GB2312\GB18030\Unicode)ASCII码表 字符 ASCII码值 A 65 B 66 C 67当做整型使用在-128~127范围内,可以当做整数来用%c和%d\%i的使用printf(“%d”, ‘A’);printf(“%c”, 68);
单引号''只能括住单字节的字符char c = '男'; // 错误写法 char c = "A"; // 错误写法 char c = A; // 错误写法案例:编写一个函数,将小写字母转为大写
char upper(char c)
{
// 如果是小写字母,就转成大写
/*
if (c>='a' && c<='z') // ['a', 'z']
{
return c - ('a' - 'A');
} else { // 如果不是小写字母,就返回字母本身
return c;
} */
// 如果是小写字母,就转成大写
if (c>='a' && c<='z') // ['a', 'z']
{
return c - ('a' - 'A');
}
// 如果不是小写字母,就返回字母本身
return c;
}
int main()
{
char cc = upper('f');
printf("%c\n", cc);
return 0;
}