黑马程序员------C语言-----进制与内存

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------



进制
什么是进制
是一种计数的方式,数值的表示形式
多种进制:十进制、二进制、八进制、十六进制。也就是说,同一个整数,我们至少有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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值