C语言进阶——有符号与无符号02
在计算机的内部,我们所有的信息都是由二进制数字组成的
有符号数的表实法:
- 在计算机内部用补码的方式表实有符号数
- 正数的补码位正数的本身
- 负数的补码为其绝对值取反然后加一得到
例如-7 他在计算机内部的是1111 1001 是这样得到的 7-》111-》0000 0111-》1111 1000-》1111 1001
无符号整数的表示:
- 在计算机内部用原码表实无符号整数
- 无符号整数默认为正数
- 无符号整数没有符号位
对于固定长度的无符号整数:
- max+1=min
- min-1=max
C语言中默认为有符号类型,可以通过unsigned来声明无符号类型的整数,特别注意,只有整数可以声明为无符号整数,浮点数没有无符号类型
代码示例1:
- #include <stdio.h>
- int main()
- {
- char c = -;
- short s = ;
- int i = -;
- printf("%d\n", ( (c & 0x80) != ));
- printf("%d\n", ( (s & 0x8000) != ));
- printf("%d\n", ( (i & 0x80000000) != ));
- return ;
- }
这里面可以通过与(位运算)来实验最高位是0还是1
代码示例2:
- #include <stdio.h>
- int main()
- {
- unsigned int i = ;
- int j = -;
- if( (i + j) > )
- {
- printf("i + j > 0\n");
- }
- else
- {
- printf("i + j <= 0\n");
- }
- return ;
- }
这段代码我们应该仔细分析一下,-10+5应该是个负数,可是为什莫会打印 i+j>0。因为在计算无符号和有符号类型做运算时,计算机会把有符号转化为无符号然后才开始进行计算
示例代码3:
- #include <stdio.h>
- int main()
- {
- unsigned int i = ;
- for(i=; i>=; i--)
- {
- printf("i = %u\n", i);
- }
- return ;
- }
这段代码错误的使用了无符号类型,导致不会退出循环,因为无符号类型你0-1后又是一个很大的正数
dfsaf
C语言进阶——有符号与无符号02的更多相关文章
- 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断
开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...
- C语言的有符号与无符号,二进制整数的扩展与截断
C语言的有符号与无符号,二进制整数的扩展与截断 前一节说了整数的表示方式,,也就是无符号编码与补码编码.这一届说一下二进制整数的扩展与截断,这部分内容与C语言挂钩.so,我们先看下面C语言的有符号和无 ...
- Java-java中的有符号,无符号操作以及DataInputStream
1. 无符号和有符号 计算机中用补码表示负数,并且有一定的计算方式:另外,用二进制的最高位表示符号,0表示正数.1表示负数.这种说法本身没错,可是要有一定的解释,不然它就是错的,至少不能解释,为什么字 ...
- int有符号和无符号类型内存 -- C
/* int 有符号 0xffffffff == -1 0xfffffffe == -2 最小 0x80000000 == -21 4748 3648 最大 0x7fffffff == 21 4748 ...
- java中有符号和无符号数据类型发生转换
package com.itheima.test01;/* * byte short int long float double 是有符号位的数 * char boolean 是无符号位的数 * 补码 ...
- 结构体位制 中存在 有符号 与 无符号 -- C
#include <stdio.h> #include <stdlib.h> #include <string.h> /* 有符号 结构体1 */ struct b ...
- char类型到底是有符号还是无符号
根据c标准,char类型到底是有符号整数类型还是无符号整数类型,这取决于c实现,也就是c编译器的作者的想法:( 那么,如何快速的编写一个检测程序,查看当前编译器如何对char进行定义? #includ ...
- 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】
原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创] 第一题 #include<stdio.h> int main() { unsigned int a=6; i ...
- ABAP语言实现 左移 <<、无符号右移 >>> 位移操作
这几天要在ABAP中实现 3DES 标准对称加密算法,与其他外部系统进行加密/解密操作.由于ABAP语言中没有 左移 <<.无符号右移 >>> 操作,只能自己实现 思路 ...
随机推荐
- 使用axios请求发送数据
之前一直没有用成功,今天看了一些博客,学会了使用axios插件 1.首先就是下载依赖啦 2.main.js import axios from 'axios'Vue.prototype.$axios ...
- C++学生信息处理
#include #include using namespace std; template int getArrayLen(T& array) //使用模板定义一个函数getArrayLe ...
- Yii2.0 安装yii2-queue并在Linux启动守护进程监听消息
一.什么是yii2-queue? Yii2-queue是Yii2.0 PHP框架下一个消息队列拓展插件,支持基于DB, Redis, RabbitMQ, AMQP, Beanstalk 和 Gearm ...
- 使用mongoDB时错误解决
接触mongodb遇到的错误,记录下来,后续遇到问题,会持续更新 为了让mongodb更直观,在windows使用了NoSQL Manager for MongoDB作为连接工具 1.在连接数据库时遇 ...
- word文档快速转换为PPT演示文稿
方法一: 访问http://t.im/pdftoppt,点击继续浏览(会跳转至:https://smallpdf.com/cn/pdf-to-ppt): 打开word文档,设置为“横向”,输出为PDF ...
- gcc编译流程
gcc的编译流程分为四个步骤,分别为: 预处理(Pre-Processing) 编译(Compiling) 汇编(Assembling) 链接(Linking) 以hello.c为例子,在这四个步骤中 ...
- 814. Binary Tree Pruning(leetcode) (tree traverse)
https://leetcode.com/contest/weekly-contest-79/problems/binary-tree-pruning/ -- 814 from leetcode tr ...
- 【转载】#344 - Hidden Base Class Member Is Invoked Based on Declared Type of Object
When you use the new modifier to hide a base class method, it will still be called by objects whose ...
- 我对XCode Objective
我对XCode Objective-c Cocoa的简单理解 Xcode Xcode说的通俗一点就是开发OS X 和 iOS 应用程序的. 如果我们想要认真点说 ,Xcode 是运行在操作系统Mac ...
- UbuntuServer14.04+CUDA7.5+CuDNNv3+Caffe+OpenCV3.0+配置
基本依赖项 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial ...