【Xcode学C-4】进制知识、位运算符、变量存储细节以及指针的知识点介绍

一、进制知识

(1)默认是十进制。八进制前面加0。即int num1=015;是13。十六进制前面加0x/0X。即int num1=0xd。结果是13。二进制前面是0b/0B,即int num1=0b1101,结果是13。

(2)输出能够是八进制、十进制、十六进制输出。各自是%o、%d、%x,但没有二进制格式直接输出。

(3)3位二进制位是0~7,三个3位二进制位就相当于八进制数据。如000001101(二进制的13),我们划分成三个一组000 001 101,再分别换算成十进制的就是0 1 5。这个015就是八进制的13。

(4)同上。二进制转换成十六进制就是4个一组划分再转换就可以。

(5)又一次补脑下面原码补码反码。计算机中存储的都是补码。

正数的三码合一。负数三码各自过。如-13。则原码是1000 1101(最高位是1表示负数,是0表示正数),反码就是除了最高位的符号位不变外其余都取反则变成1111 0010。补码是在反码基础上加1。即加0000 0001,所以补码是1111 0011。

二、位运算符

(1)&按位与,仅仅有两个都是1才返回1,即9&5=1,由于1001&0101=0001,所以是1。

所以不论什么数按位与1,结果还是那个数。

(2)同理,| 按位或。有一个是1就返回1。

(3)异或^,同样返回0(即都是1或者都是0),不同返回1。

多个整数按位异或时。顺序不影响终于结果。同样整数按位异或结果都是0。所以结果是0。

不论什么整数按位异或上0,结果还是那个整数。

(4)取反~。就是把1变成0,0变成1。

(5)左移<<。9<<1就是把9的二进制位左移1位。往左边移动多少位,就是等于9*2^(位数),即左移1位结果9*2,左移2位结果是9*4……。

可是左移有可能会改变数值的正负性,由于高位被舍弃,低位用0补齐了。使用场合:当须要计算某个数值*2的多少次方时。

(6)同理,右移就是除以2的几次方。

三、变量存储细节

(1)内存最小单位是字节,假设是一个int值须要用4个字节,那么内存分配地址的数值会从大到小分配,数值的最高位放在大地址中,放不下再逐个放在小地址中。并把终于最小的那个地址值作为整个数值的引用地址。

(2)类型修饰符之中的一个改变取值范围。int是4个字节、short和long是2个和8个字节。假设int的值放不下数值,能够用long int=1234567898765L来书写,这句话意思就是强制改变int的字节数变成8个字节。这样就能够存储更大的数据。一般我们也会在相应的数值后面加上L或者小写的l。

相应的格式化输出变成%ld。假设是short的话是%hd,是long long的话是%lld。

(3)类型修饰符之二符号。默认是signed。即正、负、0,范围是-2^(31)~2^(31)。unsigned仅仅能赋值正数和0。取值范围是0~2^(32)。能够和上面修饰符混合使用。

(4)数组作为形參时候能够不写详细元素个数,如arr[]。

数组的存储顺序和变量相反。从小地址開始放到大地址。

(5)二维数组。

int ages[2][3]={{1,2,3},{4,5,6}};

(6)字符串本质上类似于字符数组。可是字符串存储最后位有一个\0,读取遇到\0就结束。strcat()是拼接两个字符串,strcpy(a。b,1)是把b复制到a里面。且仅仅拷贝1个字符。strcmp(a,b。2)是比較两个字符串,相等返回0,前面大于后面返回正数,反之负数。升级版是strncmp(a,b,2),2表示仅仅比較前2位字符。

(7)字符串数组相当于二维数组。char a[2][10]={"hhhhhh","kkkkkk"};。

四、指针

(1)指针变量是用*标识的。如int a=5; int *p=&a;p指针就是存放了一个a的地址,而直接使用*p=20;*p相当于訪问p地址里的内存并把值改动为20。也就是此时a的值就是20。

//指针事实上就是地址之间的传来传去&表示取到这个变量的地址。

p指针本身就是地址变量,*p是直接訪问这个地址指向的内存。

//清空指针用=NULL
void change(int *p){
    *p=80;
}

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

    int num1=90;
    change(&num1);
    printf("%d\n",num1);

    return 0;
}

(2)**p表示指向指针的指针。假设要訪问值则是**p。

(3)指针变量占用8个字节。为什么要给指针变量定义数据类型int。仅仅是告诉指针在取值时候取多少个字节。

(4)指针和数组。

假设int *p=&arr[0];那么*p就是数组的第一个值。*(p+1)就是第二个值,类推。此处+1,是加了指针类型变量所占用的字节数。

(5)数组名=数组地址,即arr=&arr[0];。

(6)定义一个指向函数的指针:调用是用(*p)();就可以。但我们一般直接用p();来调用。

void change(){
    printf("jjj");
}

int main(int argc, const char * argv[]) {
    //下面两行是。相当于把函数名换成(*p),然后随后赋值一下就可以
    void (*p)();
    p=change;

    return 0;
}

(7)能够把函数当做參数进行传递,在Java里称之为回调函数。

时间: 2024-10-24 22:45:58

【Xcode学C-4】进制知识、位运算符、变量存储细节以及指针的知识点介绍的相关文章

1158: 零起点学算法65——进制转换

1158: 零起点学算法65--进制转换 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 1068  Accepted: 615[Submit][Status][Web Board] Description 输入一个十进制数N,将它转换成R进制数输出. Input 输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10). Output

16进制转化为2进制 【位运算】

#include <stdio.h> int  main() {    int i,a; while (~scanf("%x", &a)){ for(i=15;i>=0;i--) printf("%1d", a&1<<i?1:0);  //注意优先级,先移位<<,结果再与a按位与 printf("\n"); }return 0; } 16进制转化为2进制 [位运算]

进制与位运算

目录 进制与位运算 二进制,八进制,十六进制和转换 计算机中数的表示 C++的位运算 进制与位运算 二进制,八进制,十六进制和转换 二进制:由0和1组成,"逢二进一". 八进制:由0,1,2,3,4,5,6,7组成,"逢八进一". C/C++中,在数字前加上前缀"0"表示八进制. 十六进制:由0,1,2,3,4,5,6,7,8,9,A(10),B(11),C(12),D(13),E(14),F(15)组成,"逢十六进一". C

JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算

JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都是很痛苦的事情,但是程序之路这么长,你必须精通的不能再精通一门语言才行(有点说大了哈),但是最起码你要如鱼得水吧,我准备的资料有: JAVA编程思想 深入浅出JAVA 黑马,传智,慕课,极客学院等-的视频 Google搜索 我们既然是重新学一遍,那我们尽量就是用记事本去敲代码好了,这里我用notep

初学c课程笔记整理5--&gt;&gt;进制(+位运算符变量)及一些补充

是什么?有什么用?用在什么地方?(理解) 养成良好的编程习惯; 培养编程思想: 写代码之前应该先分析需求,分析完需求再开始写代码:(写注释) 1.进制 1.1进制的概念 是一种计数的方式,数值的表现形式 1.2常见的进制 十进制.二进制.八进制.十六进制 1.3进制的进位方法 十进制 0.1.2.3.4.5.6.7.8.9 逢十进一 二进制 0.1 逢二进一 书写形式:需要以0b或者0B开头,比如0b101 八进制 0.1.2.3.4.5.6.7 逢八进一 书写形式:在前面加个0,比如045 十

C语言中进制知识总结

1.什么是进制 进制是一种计数的方式,常用的有二进制.八进制.十进制.十六进制.任何数据在计算机内存中都是以二进制的形式存放的. 我对进制的个人理解,二进制数是以2为计算单元,满2进1位的数:八进制数是以8为计算单元,满8进1位的数. 对于任何一个数字,我们都可以用不同的进制来表示,比如,十进制数12,用二进制表示为1100,用八进制表示为14,用十六进制表示为0xC. 2.进制的转换规则 遵循满进制值进1位,个位数变为0的原理,下面我们以十进制数18为例,对1-18中每一个数值转换各种进制做一

进制、位运算笔记

进制 位运算 进制介绍 一种计数的方式,数值的表示形式. 常见的进制有:二进制.十进制.八进制和十六进制. 二进制: 0和1,C语言中表示0b开头或者0B开头. 八进制: 0,1,2,3,4,5,6,7 C语言中以0开头的数字,例如045 十进制: 自然数 十六进制: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F C语言中以0x或者0X开头的数字 进制之间的转换: 其他进制转换成十进制的三要素: 1. 数位:数码在一个数中所处的位置. 一个序列,从右往左数位依次是0,1,2,3

c语言:进制和位运算

一.进制 十进制转n进制: 连除倒取余. 以 10 为例,不同进制的表示方法: 十进制: 10; 二进制: 0b1010; 八进制: 010; 十六进制: 0x10; int a = 100; printf("%o",a); /* 如何输出进制数: %d ------ 十进制 %o  ------ 八进制 %0x ----- 十六进制 */ /* 位运算符:按位与 &, 按位或 |, 按位非 ~, 按位异或 ^, 左移 <<, 右移 >> 按位与 &am

javascript中的类型转换(进制转换|位运算)

1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt("123"); //输出 123 parseInt("12.3"); //输出 12 parseInt("hua"); //输出 Nan 2:另外parseInt()方法还有其他模式,就是可以把二进制.八进制.十六进制或其他任何进制的字符串转换成整数