回顾:
 1.数据类型
 2.二进制(八进制,十六进制)
---------------------------------------------------------
计算机中不可以使用负号表示负数

计算负数二进制的过程:
 1.计算出相反数的二进制
 2.把上一步的结果按位求反再加一
使用上述方法计算出的结果就是二进制补码,可以直接存储在计算机中

所有数据类型中,左边一个 1 右边全 0 的二进制表示这个类型中的最小数
-55 -->  55  --> 32 + 16 + 4 + 2 + 1 --> 0011 0111 -->1100 1000 + 1 --> 1100 1001
-96 --> 96 --> 64 + 32 --> 0110 0000 --> 1001 1111 + 1 -->1010 0000

使用上述方法可以根据任意二进制补码计算相反数的补码

所有负数的二进制补码最左边数位一定是1
有符号数据最左边一个数位是1则表示负数

有符号数据最左边数位叫做符号位
符号位不等同于符号,仅仅是能表示符号

整数类型之间赋值的过程中会保持二进制不变
在整数类型赋值过程中如果需要扩展则扩展有符号数据的符号位

-----------------------操作符--------------------------
 , 是一个操作符,可以用来连接两个简单表达式
用 , 编写的表达式的计算结果是最后一个简单表达式的计算结果
 , 操作符的优先级非常低

赋值操作符(=)可以用来改变变量的内容
赋值操作符左边必须是一个值,可以简单的理解为变量
赋值操作符右边必须是一个可以当作数字使用的东西;
赋值操作符的优先级非常低
一条语句中可以包含多个操作符,计算顺序是先计算右边的后计算左边的;

C语言中按照操作符所需要的数字个数对操作符进行了分组
单目操作符只需要一个数字
双目操作符需要两个数字
三目操作符需要三个数字

绝大多数双目操作符可以和赋值操作符合并形成复合赋值操作符 (例如,+= ,-=,*=,%=等)
复合赋值操作符可以把计算结果记录在某个参与计算的变量中
复合赋值操作符也都是双目操作符
复合赋值操作符前面的必须是一个变量,后面是一个可以当数字使用的东西
复合赋值操作符的优先级和赋值操作符优先级一样

自增操作符(++)和自减操作符(--)可以对一个变量进行加一或减一操作
自增和自减操作符都是单目操作符,与它们配合使用的必须是一个变量
自增和自减都存在前操作和后操作两种方式
前操作的优先级非常高,后操作的优先级非常低
不要在同一条语句中对同一个变量多次进行自增或自减计算

布尔类型包含两个数据,一个是真(true)另一个是假(false)
在计算机中真用1表示,假用0表示
为了在程序中使用布尔类型,需要包含stdbool.h文件

任何整数数据都可以当成布尔类型数据使用。
数字0当作布尔值使用时是假,其它整数当布尔值使用时是真

逻辑表达式的计算结果只能是真或者假
逻辑操作符用来编写逻辑表达式
双目逻辑操作符包括 ==,!=,>,<,>=,<=
!是一个单目逻辑操作符,它表示对一个现有的布尔值进行求反操作

逻辑操作符的优先级比算术操作符的优先级低

与(&&)和 或(||)也是两个双目逻辑操作符,它们可以用来连接两个简单逻辑表达式
如果多个简单逻辑表达式的计算结果都是真,则用 与 把它们连接起来以后得到的复杂逻辑表达式的计算结果也为真
如果多个简单逻辑表达式的计算结果中有一个是真则用 或 把它们连接起来以后得到的复杂逻辑表达式的结果就是真

与(&&)和 或(||)都具有短路特征:
如果复杂逻辑表达式中前面的部分已经决定了整个结果则后面的部分根本不会计算。

位操作符直接对二进制数据位进行操作
双目位操作符包括按位与(&)按位或(|)以及按位异或(^)

按位与(&)把对应数位上的数字进行与计算
 0 & 0  0
 1 & 1  1
 0 & 1   0
3 0000 0011
5 0000 0101
 0000 0001        (同1出1)
按位或(|)把对应数位上的数字进行或计算
 0 | 0  0
 1 | 1   1
 0 | 1  1
3 0000 0011
5 0000 0101
    0000 0111         (有1出1)
按位或可以把一个字节中任何一个数位设置成1
任何数字和0按位或结果不变
任何数字和1按位或结果是1

按位异或(^)把对应数位上的数字进行异或操作
 0 ^ 0  0
 1 ^ 1  0
 0 ^ 1  1
3 0000 0011
5 0000 0101
 0000 0110          (相同出0)
按位异或可以把一个字节中的某些数位求反
任何数字和0按位异或结果不变
任何数字和1按位异或则求反

预习:
 1.其它位操作符
 2.三目操作符
 3.类型转换
 4.分支(if,switch..case)
 5.循环(for)

作业:
 1.编写逻辑表达式判断某个年份是不是闰年
    (可以被4整除但是不能被100整除 或 可以被400整除)
     2.使用一个char类型变量的最右边三个二进制数位控制红绿灯,顺序是红黄绿。如果对应数位上是1则灯亮,否则等灭。
     1)编写语句在不知道变量内容的情况下点亮红灯,熄灭另外两盏灯(0000 0100)
     2)如果已知绿灯亮,其它灯灭。编写语句熄灭绿灯点亮黄灯

Day05_C操作符及二进制补码计算的更多相关文章

  1. 利用ZYNQ SOC快速打开算法验证通路(1)——MATLAB浮点数与定点二进制补码互转

    最近本人一直在学习ZYNQ SOC的使用,目的是应对科研需要,做出通用的算法验证平台.大概思想是:ZYNQ PS端负责与MATLAB等上位机数据分析与可视化软件交互:既可传输数据,也能通过上位机配置更 ...

  2. 二进制补码除法——计算机底层整数除法模拟之Java实现

    前面讲到布思算法的计算机底层模拟的时候,我们是借助于一个可以储存.表示任意N位的二进制补码的BinaryQueue实现的,现在我们模拟计算机底层整数除法还是要借助于它: BinaryQueue类代码: ...

  3. 二进制补码:Why & How

    二进制补码:Why & How 学习计算机原理或者语言的底层操作难免会遇到用二进制补码表示负数的问题.由于一些书本上对于采用补码的原因没有详细解释,很多人会认为这只是一种规定,但实际上采用补码 ...

  4. java基础 二进制补码

    二进制补码: 1.计算机系统的内部以二进制形式存储数据. 2.在Java程序中输入的十进制的数据都会被自动转换为二进制,Java内部也以二进制来进行数值运算,但返回的结果是十进制. 二进制补码的原理: ...

  5. Day04_数据类型占位符使用及进制转换

    2013年10月09日 星期三 10时03分51秒 回顾:  1.变量  2.scanf标准函数 字符类型是一种数据类型 在C语言程序中字符类型用char表示 字符类型中包含了256个不同的字符,例如 ...

  6. 原码、反码、补码及位操作符,C语言位操作

    计算机中的所有数据均是以二进制形式存储和处理的.所谓位操作就是直接把计算机中的二进制数进行操作,无须进行数据形式的转换,故处理速度较快. 1.原码.反码和补码 位(bit) 是计算机中处理数据的最小单 ...

  7. 二进制原码、反码、补码以及Java中的<< 和 >> 和 >>> 详细分析

    1.计算机二进制系统中最小单位bit 在计算机二进制系统中: bit (位) :数据存储的最小单元. 简记为b,也称为比特(bit),每个二进制数字0或1就是一个位(bit),其中,每 8bit = ...

  8. java二进制表示形式与移位操作符

    java二进制表示形式 java中数字的二进制表示形式称为"有符号的二进制补码",下面先介绍原码,反码,补码. 编码 计算方法 原码 用最高位表示符号位,'1'表示负号,'0'表示 ...

  9. 任意N位二进制的补码实现——队列存放

    正在学习计算机组织与结构,为了写一些底层的算术操作模拟,比如一个二进制补码数的加减乘除,发现这很麻烦,因为不管是什么语言,都只提供了8位.32.64位等部分位数的补码形式,那么怎么实现任意任意位的补码 ...

随机推荐

  1. 【WPF】ScrollViewer无法滚动的问题

    还需要给ScrollViewer注册一个鼠标滚轮事件! XAML: <ScrollViewer x:Name="scrollViewer" Width="950&q ...

  2. Ubuntu 下查看中文man手册方法

    转载自:http://blog.chinaunix.net/uid-24830506-id-3266493.html Ubuntu 中文man手册安装方法 分类: LINUX Ubuntu 下查看中文 ...

  3. [转]getHibernateTemplate出现的所有find方法的总结

    一.find(String queryString); 示例:this.getHibernateTemplate().find("from bean.User"); 返回所有Use ...

  4. 缓存之 ACache

    1.android缓存的介绍 Android开发本质上就是手机和互联网中的webserver之间进行通信,就必定须要从服务端获取数据.而重复通过网络获取数据是比較耗时的.特别是訪问比較多的时候.会极大 ...

  5. 简单十招提高jQuery执行效率

    1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的j ...

  6. C++/C语言的标准库函数与运算符的区别new/delete malloc/free

    malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.下面来看他们的区别. 一.操作对象有所不同 malloc与free是C++ ...

  7. 第二百九十三,Memcached缓存

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached ...

  8. 利用Graphviz 可视化GO 数据库

    GO是一个同源蛋白的数据库,按照三大类别BP(生物学过程), MF(分子功能), CC(细胞组分) 对基因的产物-蛋白质进行了分类: 在GO数据库中,本质上是一个有向无环图的数据结构,在三大类别之下, ...

  9. 基于bootstrap的Dialog

    function yms_Dialog(container_id, modal_path, handle_function) {     /// <summary>    ///      ...

  10. 图片后门捆绑利用工具 – FakeImageExploiter

    在这里,要向大家推荐一款名为“Fake Image Exploiter”的安全工具,该工具可以在图片文件中捆绑隐藏的恶意.bat或.exe程序,方便钓鱼或社工攻击测试过程中的入侵控制.如果受害者点击该 ...