进制

二进制   0 1组成,封2进1

八进制 0~7组成,封8进1

十进制 0~9组成,封10进1

十六进制 0~15组成,封16进1

printf以不同进制形式进行输出

变量的内存地址形式

变量在内存中是从高地址到低地址依次保存的,并且只保存二进制

查看内存地址的两种方式:%x和%p

各个类型变量的取值范围

类型修饰符

在64bit编译器环境下,

  int占用4个字节(32bit),取值范围是-231~231-1;

  short占用2个字节(16bit),取值范围是-215~215-1;

  long占用8个字节(64bit),取值范围是-263~263-1。

  可以连续使用2个long,也就是long long。一般来说,long long的范围是不小于long的,比如在32bit编译器环境下,long long占用8个字节,long占用4个字节。不过在64bit编译器环境下,long long跟long是一样的,都占用8个字节。

注意:short int等价于short,long int等价于long,long long int等价于long long

signed和unsigned

signed:表示有符号,也就是说最高位要当做符号位,所以包括正数、负数和0。

unsigned:表示无符号,也就是说最高位并不当做符号位,所 以不包括负数。

signed int a; a的取值范围是l   -231 ~ 231 - 1

unsigned int a; a的取值范围是0 ~ 232 - 1

位运算

1.      & 按位与:只有对应的两个二进位均为1时,结果位才为1,否则为0。

2.      | 按位或:只要对应的二个二进位有一个为1时,结果位就为1,否则为0。

3.      ^ 按位异或:当对应的二进位相异(不相同)时,结果为1,否则为0。

4.      ~ 取反:对整数a的各二进位进行取反,符号位也取反(0变1,1变0)

5.      << 左移:把整数a的各二进位全部左移n位,高位丢弃,低位补0。左移n位其实就是乘以2的n次方。由于左移是丢弃最高位,0补最低位,所以符号位也会被丢弃,左移出来的结果值可能会改变正负性。

6.      >> 右移: 把整数a的各二进位全部右移n位,保持符号位不变。右移n位其实就是除以2的n次方,为正数时, 符号位为0,最高位补0,为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。

转义字符

除了这些字符,其他的字符都可直接输出。

下面是代码示例,再Xcode下有时会出现一些莫名其妙的问题。再vs2013下就没问题。比如说异或字符 ^,在xcode下有警告,vs2013下没有。

 #include <stdio.h>

 /*
修饰符
unsigned//无符号数,没有正负号
signed//有符号数,最高位位符号位,表示这个数的正负。
char //都是1个字节
int //64位下4个字节
long //64位下8个字节
long long //64位下也是8个字节
short //short 类型2个字节
float //都是4个字节
double //都是8个字节 */ //函数声明
//输出整数的二进制形式
void intToBinary(int n);
int main()
{
//每个类型占得长度
/* printf("char length is :%lu\n",sizeof(char));
printf("short length is :%lu\n",sizeof(short));
printf("int length is :%lu\n",sizeof(int));
printf("long length is :%lu\n",sizeof(long));
printf("long long length is :%lu\n",sizeof(long long));
printf("float length is :%lu\n",sizeof(float));
printf("double length is :%lu\n",sizeof(double));
printf("int * length is :%lu\n",sizeof(int *)); //内存地址的分配时从高位到低位,并且以二进制存储
int n1 = 111;
int n2 = 222; //打印内存地址有两种形式 %x和%p
printf(" n1 Address is :%x\n",&n1);//测试结果 5e6ebc28(%x)
printf(" n2 Address is :%p\n",&n2);//测试结果 0x7fff5614ec24(%p)
*/
int a = ;
unsigned int a1 = ;
signed int a2 = ;//signed int == int,int默认就是unsigned short a3 = ;//short == short int
short int a4 = ; long int la = ;//long int == long
long long int lla = ;//long long int == long long
unsigned long int ula = ;//unsinged long int == unsigned long
signed long int sln = ;//默认是signed,signed long == long //取值范围
//int len1 = 12345678910111213141516;
//printf("%d\n",len1);//123456789 //位运算,
//& 与 ,同时为1结果为1,否则是0
//| 或,只要有一个为1结果为1,同时是0为0
//~ 取反,1变0,0变1
//^ 异或,相异取1,否则取0
//>> 右移,保持符号位不变,正数补0,负数补0还是1由变异系统确定
//<< 左移,高位丢弃,低位补0,会失去符号位,改变正负性
int byte1 = ;
int byte2 = ;
printf("3&3与: %d\n",byte1&);
printf("3&2与: %d\n",byte1&byte2);
printf("3|3或: %d\n",byte1|);
printf("3|2或: %d\n",byte1|);
printf("~3取反: %d\n",~byte1);
printf("3^2异或 %d\n",byte1^byte2);
printf("3^3异或 %d\n",byte1^);
printf("2>>2右移 %d\n",byte2>>);
printf("2<<2左移 %d\n",byte2<<);
//交换两个变量的值
printf("byte1 %d\n",byte1);
printf("byte2 %d\n",byte2);
byte1 = byte1 ^ byte2;
byte2 = byte1 ^ byte2;
byte1 = byte1 ^ byte2;
printf("after exchange\n");
printf("byte1 %d\n",byte1);
printf("byte2 %d\n",byte2);
//转义字符
// ^ 在Xcode下会有警告,不明白,可能是编译器的问题
printf("sda\t\"\'\\`!@#$%^&*()_+\n\0"); //整数转换二进制输出
intToBinary(a); return ;
} //函数定义
void intToBinary(int n)
{
int bits = sizeof(n)*;//二进制长度
while (bits-->)//循环遍历每一个二进制位
{
printf("%d",n>>bits&);//右移bits位,从最高位开始取值,和1相与,结果就是0取0,1取1
if (bits% == )//四位一组输出
{
printf(" ");
}
}
}

ios开发学习笔记004-进制与位运算的更多相关文章

  1. 【JavaScript】进制转换&位运算,了解一下?

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

  2. Python笔记_第一篇_面向过程_第一部分_3.进制、位运算、编码

    通过对内存这一个部分的讲解,对编程会有一个相对深入的认识.数据结构是整个内存的一个重要内容,那么关于数据结构这方面的问题还需要对进制.位运算.编码这三个方面再进行阐述一下.前面说将的数据结构是从逻辑上 ...

  3. iOS开发学习笔记:基础篇

    iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...

  4. ios开发学习笔记001-C语言基础知识

    先来学习一下C语言基础知识,总结如下: 在xcode下编写代码. 1.编写代码 2.编译:cc –c 文件名.c 编译成功会生成一个 .o的目标文件 3.链接:把目标文件.o和系统自带的库合并在一起, ...

  5. ios开发学习笔记(1)

    objective-c基础总结 第一二章 1.application:didiFinishLauchingWithOptions:程序启动后立即执行 2.启动界面代码格式:self.window = ...

  6. leetcood学习笔记-67-二进制求和

    题目描述: 第一次提交: class Solution: def addBinary(self, a: str, b: str) -> str: list_a,list_b=[],[] for ...

  7. C语言学习笔记之进制之间的转换

    这一篇主要是对进制之间转换的讲解,方便查看,以防忘记 二进制      逢二进一 八进制      逢八进一                以0开头, 0就是8进制的标志 十进制      逢十进一 ...

  8. C#的格式化(进制转换|位运算)

    1.首先做一下知识的普及C或c Currency 货币格式D或d Decimal 十进制格式E或e Exponent 指数格式F或f Fixed point (float)固定精度格式G或g Gene ...

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

    1:parseInt(string) : 这个函数的功能是从string的开头开始解析,返回一个整数 parseInt("123hua"); //输出 123 parseInt(& ...

随机推荐

  1. 配置Ubuntu DNS

    首先,你可以在/etc/hosts中加入一些主机名称和这些主机名称对应的IP地址,这是简单使用本机的静态查询.要访问Ubuntu DNS 服务器来进行查询,需要设置/etc/resolv.conf文件 ...

  2. Notification高级技巧

    观察Notification这个类,你会发现里面还有很多我们没有使用过的属性.先来看看sound这个属性吧,它可以在通知发出的时候播放一段音频,这样就能够更好地告知用户有通知到来.sound 这个属性 ...

  3. django ORM 简单示例简绍

    简单 models 操作 class Host(models.Model): nid = models.AutoField(primary_key=True) #Nid为主键 hostname = m ...

  4. cmd中不能输入中文

    在命令行窗口下不能输入中文,只能输入英文,这是因为cmd.exe窗口启动时并没有启动conime.exe进程.事实上,这个进程容易被后门病毒利用,因此网上很多人都把它当成病毒看待,一些网上下载的系统就 ...

  5. LeetCode Best Time to Buy and Sell Stock II (简单题)

    题意: 股票买卖第2题.给出每天的股票价格,每次最多买一股,可以多次操作,但是每次在买之前必须保证身上无股票.问最大的利润? 思路: 每天的股票价格可以看成是一条曲线,能卖掉就卖掉,那么肯定是在上升的 ...

  6. Python风格规范-FYI

    Python风格规范 分号 Tip 不要在行尾加分号, 也不要用分号将两条命令放在同一行. 行长度 Tip 每行不超过80个字符 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行. Py ...

  7. appuim操作webview控件

    1.操作webview控件,在uiautomator中如下图,能定位的只有最外层的内容.就一个webview控件,查找不到里面内容 1.使用driver.getContext(),获取是否是webvi ...

  8. 【洛谷2403】[SDOI2010] 所驼门王的宝藏(Tarjan+dfs遍历)

    点此看题面 大致题意: 一个由\(R*C\)间矩形宫室组成的宫殿中的\(N\)间宫室里埋藏着宝藏.由一间宫室到达另一间宫室只能通过传送门,且只有埋有宝藏的宫室才有传送门.传送门分为3种,分别可以到达同 ...

  9. 【洛谷2051】[AHOI2009] 中国象棋(烦人的动态规划)

    点此看题面 大致题意: 让你在一张\(N*M\)的棋盘上摆放炮,使其无法互相攻击,问有多少种摆法. 辟谣 听某大佬说这是一道状压\(DP\)题,于是兴冲冲地去做,看完数据范围彻底懵了:\(N≤100\ ...

  10. 【转】操作系统Unix、Windows、Mac OS、Linux的故事

    电脑,计算机已经成为我们生活中必不可少的一部分.无论是大型的超级计算机,还是手机般小巧的终端设备,都跑着一个操作系统.正是这些操作系统,让那些硬件和芯片得意组合起来,让那些软件得以运行,让我们的世界在 ...