IOS第一天 C的学习。

IOS学习的第一天,拿起了几年前没摸的C,java用的久了,都忘记了C的很多东西下面整理一下今天所学的。

 0 ,一天的总结
今天是个奇妙的一天,本来觉得今天会很枯燥,可是真的开始听发现真的自己还说有很多模糊的地方,通过今天的复习,
总结了很多不同的知识点 这些都是要好好补充的地方,理解并多加练习。


1 各种进制之间的转换

二进制转10进制 简单的要记住 128 64 32 16 8 4 2 1 着这几个数就够了

十进制转二级制 简单的用减法。

十六进制转10进制 注意 A10 B11 C12 D13 E14 F15  记住A是10 别再闹笑话了

10转16方法 
先2转16 
4位 4位转

2 关于变量的定义

定义变量 例如
int a = 3;
int b = 3;
即使值相等 系统分配的内存也是不一样的。

定义变量后 变量名称不可改变 分配内存可不可改变?(强制转换?)变量名称不可以改变 分配的内存也是固定的 

强制类型转换只是转换了表达形式

地址内保存的值可改变

无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,

而不改变数据说明时对该变量定义的类型。

4 关于位数

int         8 位
short     4 位
char     3 位
char 类型 赋值的是asc2 码 
char a = 6 ;

5 关于++a和a++

++a 与 a++

参与其他运算的时候
++a 是先自增1 再运算
a++ 是先运算再自增1
(- -a和a- -  同上)
6 关于位运算
& |   ~  ^  
位运算

&同1为1 (可能有从小的规律)
| 有1为1 (从大)


| 在编程中的意义  是合并 所有的都分享 大家一起嗨
& 的意义是 截取    两个人都是小气鬼 都把自己独有的藏起来 只拿同有的。
~取反
^按位异或 相同取0 不同取1
负数变正数 取反加1 
正数变负数 减一取反
最高位符号位 1为负 0为正

<<  左移 乘二 高位溢出
7 关于输入输出

scanf("%d,%d",&a,&a);

注意输入的前面的格式要和后面的格式相同,如“,”既需要输入,

	%d 输出整型格式,也就是10进制数
	%c 输出字符格,也就是单个字母或者符号什么的
	%f 输出浮点数,也就是带有四位小数位的数,比如10.0000
	%ld 输出长整型格式,差不多和10进制一样,只是它可以输出很大的数
	%u 输出无符号数,这个基本输出和%d差不多
	%s 输出字符串,一般都是输出一个char数组的所以字符
	%lf 输出长浮点数,也就是所谓的双精度浮点数,double类型,可以输出很大的带小数位的数
	%a(%A) 浮点数、十六进制数字和p-(P-)记数法(C99)
	%c 字符
	%d 有符号十进制整数
	%f 浮点数(包括float和doulbe)
	%e(%E) 浮点数指数输出[e-(E-)记数法]
	%g(%G) 浮点数不显无意义的零"0"
	%i 有符号十进制整数(与%d相同)
	%u 无符号十进制整数
	%o 八进制整数 e.g. 0123
	%x(%X) 十六进制整数0f(0F) e.g. 0x1234
	%p 指针
	%s 字符串
	%% "%"
	%和\无法单独出现 必须和其他或本身结合 而且 %和\不能一起出现

8 关于作业题
1, 我自己所想出来的
void moveing()
{
    //    循环位移 思想是判断最后一位是否为1 为1加128 为0不变。

    
   
    int a =0;
    printf("请输入一个小于等于255的数:");
    scanf("%u",&a);
    int b = 0 ,n = 0,c=a;
    printf("请输入位移位数:");
    scanf("%u",&n);
    for(int i = 0 ; i < n ; i++)
    {
        b = c>>1;
        if(c%2!=0)
        {
            b=b+128;
        }
        c=b;
    }
    
    printf("输入的数转换16进制为%x;\n",a);
    printf("输出的数转换16进制为%x;",b);

}
同学想出来的
int main(int argc, const char * argv[])
{
    unsigned char num = 0;
    unsigned int save = 0;
    unsigned loopright = 0;
    printf("输入待右移的数字与移动的位数:\n");
    scanf("%u %u", &save, &loopright);
    num = (unsigned char)save;
    loopright = loopright%8;
    num = (num>>loopright) | num<<(8-loopright);
    printf("结果: %u\n", num);
    return 0;
}

总结: 我的想法是很浅显的,只是简单的走了第一步,寻找位移一位的想法,没有更深入的理解位运算和与运算的深度,这和本身的水平 和长期从事java没有深入理解这些有关,这一次深深的认识到了它的奇妙。
void change()
{
  unsigned char c = 'a';
    int b = 0 ,a = 0;
    int v = c;
    a = v % 16;
    b = v / 16;
    c = a*16+b;
    printf("%d" ,c);
}

void change2()
{
    unsigned char test = 0;
    unsigned int save = 0 ;
    printf("输入交换的数字:\n");
    scanf("%u",&save);
    test = (unsigned char)save;
    test = test>>4|test<<4;
    printf("交换后的数字为:%u",test);
}
int a = 0;
a = arc4random()%30;
printf("%d",a);

int a = 0 ;
a = arc4random();
printf("%d",a%30);

上不会取到负数
下会取到负数

原因是random这个函数不会取到负数 或许会取到一个高位为1的数它立即会和30取模
这时候赋值给a 肯定为30内的正数
而下方时会先赋值给a a有符号会变负数再取模则会产生负数。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值