类型转换

自动转换

小范围的类型能够自动转换成大范围的类型。short->int->long->float->double

强制类型转换

(类型名)变量或数值

#include <stdio.h>
#include <stdlib.h> // standared 标准
// input output 输入/输出
// header 头 .h头文件 int main() // 返回int,如果是void表示没有返回
{
// 大类型就相当于把一瓶酒中的水,倒入酒盅里,会洒 double num = 6; // 小类型转大类型 - 自动类型转换
int num1=(int)num;// 大类型转小类型,损失精度 - 强制类型转换 return 0;
}

运算符和条件结构

赋值运算符、算术运算符、关系运算符、逻辑运算符

表达式是由一系列[操作符](operators)和[操作数](operands)组成的。

赋值运算符

=、+=、-=、*=、/=、%=

#include <stdio.h>
#include <stdlib.h> // standared 标准
// input output 输入/输出
// header 头 .h头文件 int main() // 返回int,如果是void表示没有返回
{ // 复合运算符
int num = 8;
num %= 5; // num = 8 % 5;
printf("%d",num); // 3 return 0;
}

算术运算符

一元:++、--

二元:+、-、*、/、%

关系运算符

> 、<

>=、<=

== 、 !=

#include <stdio.h>
#include <stdlib.h> // standared 标准
// input output 输入/输出
// header 头 .h头文件 int main() // 返回int,如果是void表示没有返回
{ // 关系运算符
int num1 = 5;
int num2 = 8;
int result = num1>num2;
printf("%d\n",result); // 0 return 0;
}

老九语录,在高级语言中才有true、false。c语言中没有这玩意。学习C语言能够增加大家的内功。

逻辑运算符

|| && !

#include <stdio.h>
#include <stdlib.h> // standared 标准
// input output 输入/输出
// header 头 .h头文件 int main() // 返回int,如果是void表示没有返回
{ // 逻辑运算符
int hasHouse; // 有房吗
int hasCar; // 有车吗 printf("是否有房?\n");
scanf("%d",&hasHouse); printf("是否有车?\n");
scanf("%d",&hasCar); if (hasHouse && hasCar) {
printf("可以结婚");
} else {
printf("不可以结婚");
} return 0;
}

位运算符(转换为二进制进行计算)

&

|

~

^

<<

>>

#include <stdio.h>
#include <stdlib.h> // standared 标准
// input output 输入/输出
// header 头 .h头文件 int main() // 返回int,如果是void表示没有返回
{ // 逻辑运算符,位运算符
printf("%d\n",4 && 2); // 1 printf("%d\n",4 & 2); // 0 换算成二进制 0000-0100 0000-0010 与运算之后得到 0000-0110 printf("%d\n",4 | 2); // 6 换算成二进制 0000-0100 0000-0010 或运算之后得到 0000-0110 printf("%d\n",4 ^ 2); // 6 换算成二进制 0000-0100 0000-0010 位异或运算之后得到 0000-0110 printf("%d\n",~4); // -5 换算成二进制 0000-0100 非运算之后得到 1111-1011(补码 -5) 原码10000101 反码11111010 补码11111011 return 0;
}

原码(原码就是符号位加上真值的绝对值, 即用第一位表示符号,其余位表示值)、反码(正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反)、补码(正数的补码就是其本身,负数的补码是在其原码的基础上,符号位不变, 其余各位取反,最后+1。【即在反码的基础上+1】)。

[+1] = [00000001]原 = [00000001]反 = [00000001]补
[-1] = [10000001]原 = [11111110]反 = [11111111]补

既然原码才是被人脑直接识别并用于计算表示方式,为何还会有反码和补码呢?

因为人脑可以知道第一位是符号位, 在计算的时候我们会根据符号位, 选择对真值区域的加减。 但是对于计算机, 加减乘数已经是最基础的运算, 要设计的尽量简单。计算机辨别"符号位"显然会让计算机的基础电路设计变得十分复杂!于是人们想出了将符号位也参与运算的方法。 我们知道,根据运算法则减去一个正数等于加上一个负数。即: 1-1 = 1 + (-1) = 0 , 所以机器可以只有加法而没有减法,这样计算机运算的设计就更简单了。

原码计算: 1-1=0

1 - 1 = 1 + (-1) = [00000001]原 + [10000001]原 = [10000010]原 = -2

得到的结果是不正确的。

反码计算: 1-1=0

1 - 1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原= [0000 0001]反 + [1111 1110]反 = [1111 1111]反 = [1000 0000]原 = -0

发现用反码计算减法,结果的真值部分是正确的。而唯一的问题其实就出现在"0"这个特殊的数值上。 虽然人们理解上+0和-0是一样的,但是0带符号是没有任何意义的。而且会有[0000 0000]原和[1000 0000]原两个编码表示0。

补码计算: 1-1=0

1-1 = 1 + (-1) = [0000 0001]原 + [1000 0001]原 = [0000 0001]补 + [1111 1111]补 = [0000 0000]补=[0000 0000]原 = 0

补码的出现解决了0的符号以及两个编码的问题。

c语言中类型转换与赋值运算符、算术运算符、关系运算符、逻辑运算符。原码、反码、补码。小解。的更多相关文章

  1. C语言原码反码补码与位运算.

      目录:     一.机器数和真值     二.原码,反码和补码的基础概念     三.为什么要使用原码,反码和补码     四.原码,补码,反码再深入     五.数据溢出测试     六.位运算 ...

  2. 「C语言」原码反码补码与位运算

    尽管能查到各种文献,亲自归纳出自己的体系还是更能加深对该知识的理解.     本篇文章便是在结合百度百科有关原码.反码.补码和位运算的介绍并深度借鉴了张子秋和Liquor相关文章后整理而出.   目录 ...

  3. 大数据学习--day02(标识符、变量、数据类型、类型转换、进制转换、原码反码补码)

    标识符.变量.数据类型.类型转换.进制转换.原码反码补码 标识符: java50个关键字不能做标识符,以数字开头不能做标识符(这个老是忘记写一个类名的时候) 变量: 变量分为成员变量和局部变量,注意作 ...

  4. C语言学习笔记之原码反码补码

    原码:就是我们自己看的,以及机器输出给我们看的 补码:机器永远是以补码的形式将数据保存在计算机中 正数: 原码=反码=补码 负数: 反码:原码的符号位不变,其他位取反 ,1变0   0变1 补码:机器 ...

  5. C语言基础 (4) 原码反码补码与数据类型

    1.回顾 使用gcc编译代码 gcc hello.c -o hello windows下编译代码 C语言编译步骤: 预处理(头文件展开,干掉注释) gcc -E hello.c -o hello.i ...

  6. C语言基础(4)-原码,反码,补码及sizeof关键字

    1. 原码 +7的原码是0000 0111 -7的原码是1000 0111 +0的原码是0000 0000 -0的原码是1000 0000 2. 反码 一个数如果值为正,那么反码和原码相同. 一个数如 ...

  7. Python环境安装与基础语法(3)——进制、运算符和优先级、原码、补码

    进制 转十进制:基本运算方法(权算方式) 0b1111——>1*2**3 + 1*2**2 + 1*2**1 + 1*2**0 0x7F——>7*16**1 + F*16**0 转二进制: ...

  8. C语言:数的保存 原码 反码 补码

    a=6                                     a=-18 a 的原码就是0000 0000 0000 0110        1000 0000 0001 0010 ...

  9. C语言 原码--反码--补码

    //原码,反码,补码 #include<stdio.h> #include<stdlib.h> //数值的表示方法——原码.反码和补码 //原码:最高位为符号位,其余各位为数值 ...

随机推荐

  1. Android学习之——优化篇(1)

    一.优化的品质 1.简练.2.可读性强.3.模块化:4.层次性:5.设计良好.6.高效.7.优雅:8.清晰. 二.常见的编程规范     1. 基本要求 · 结构清晰,简单易懂.单个函数不超过100行 ...

  2. php利用反射真正实现多继承(非接口模拟)

    昨天我在写PHP程序的时候,无意发现在PHP的::操作符非常强大,不仅仅是只用在访问parent,sel,静态成员属性.常量上面,其实他的功能强大了去了 . 这个符号在PHP中实际上叫做范围解析符,这 ...

  3. oracle init.ora常用配置详解

    参考网上整理了重要的配置文件 db_name = "51cto"   一个数据库标识符,应与CREATE DATABASE 语句中指定的名称相对应. instance_name = ...

  4. 11.MATLAB基本编程

    概述: 1 脚本M文件 clear all; %设置精度 format long; %定义变量 n= s= %循环 :n s=s+/^i; end s format short; 2 函数M文件 fu ...

  5. datatable dataRow

    DataRow[] Drs = DtStockProduct.Select(Condition11); DtResult = DtStockProduct.Clone(); datatble tabl ...

  6. PHPMailer使用说明

    PHPMailer是一个用来发送电子邮件的函数包,远比PHP提供的mail()方便易用. 邮件格式说明 一封普通的电子邮件,通常是由发件人.收件人.抄送人.邮件标题.邮件内容.附件等内容构成.以下是一 ...

  7. 使用最新vue_cli+webpack搭建的模版

    使用最新vue_cli+webpack搭建的模版,包含了常用的插件,router和axiox与测试插件.项目的结构如下: 框架下载地址:https://share.weiyun.com/5Cl7EbU

  8. ListView的Item动画

    1.效果图 2.需求就是点击item歌曲时,实现一种飞入到预约按钮处的效果 3.思路:在布局文件中加入了一个条目布局,和listView的item一样,点击listView的item时,使用给条目布局 ...

  9. poj 2762 Going from u to v or from v to u? 【 强连通 拓扑排序】

    给出n个点,m条边,问是否任意两点u,v,是否满足u能够到达v,或者v能够到达u 自己写的时候以为缩一下点,然后再判断一下能不能拓扑排序就可以了 但是--wa--- 后来看了这篇题解 http://e ...

  10. Ubuntu14.0 + CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0

    在安装好nvidia驱动的基础上安装 CUDA9.0 + cudnn7.0 + TensorFlow-gpu1.7.0 这三个是匹配的版本 别的匹配(CUDA8.0 + cudnn6.0 + Tens ...