在计算机的内部,我们所有的信息都是由二进制数字组成的

有符号数的表实法:

  • 在计算机内部用补码的方式表实有符号数
  • 正数的补码位正数的本身
  • 负数的补码为其绝对值取反然后加一得到

例如-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的更多相关文章

  1. 深入理解计算机系统(2.4)---C语言的有符号与无符号、二进制整数的扩展与截断

    开篇请各位猿友允许LZ啰嗦几句,最近一直在写计算机系统原理这系列文章,也已经下定决心要把这本书的内容写完.主要目的其实是为了巩固LZ的理解,另外也想把这些内容分享给猿友们,毕竟LZ觉得这些内容对程序猿 ...

  2. C语言的有符号与无符号,二进制整数的扩展与截断

    C语言的有符号与无符号,二进制整数的扩展与截断 前一节说了整数的表示方式,,也就是无符号编码与补码编码.这一届说一下二进制整数的扩展与截断,这部分内容与C语言挂钩.so,我们先看下面C语言的有符号和无 ...

  3. Java-java中的有符号,无符号操作以及DataInputStream

    1. 无符号和有符号 计算机中用补码表示负数,并且有一定的计算方式:另外,用二进制的最高位表示符号,0表示正数.1表示负数.这种说法本身没错,可是要有一定的解释,不然它就是错的,至少不能解释,为什么字 ...

  4. int有符号和无符号类型内存 -- C

    /* int 有符号 0xffffffff == -1 0xfffffffe == -2 最小 0x80000000 == -21 4748 3648 最大 0x7fffffff == 21 4748 ...

  5. java中有符号和无符号数据类型发生转换

    package com.itheima.test01;/* * byte short int long float double 是有符号位的数 * char boolean 是无符号位的数 * 补码 ...

  6. 结构体位制 中存在 有符号 与 无符号 -- C

    #include <stdio.h> #include <stdlib.h> #include <string.h> /* 有符号 结构体1 */ struct b ...

  7. char类型到底是有符号还是无符号

    根据c标准,char类型到底是有符号整数类型还是无符号整数类型,这取决于c实现,也就是c编译器的作者的想法:( 那么,如何快速的编写一个检测程序,查看当前编译器如何对char进行定义? #includ ...

  8. 【 c语言中无符号和有符号的加法运算】【深入理解】--【sky原创】

    原文:[ c语言中无符号和有符号的加法运算][深入理解]--[sky原创]   第一题 #include<stdio.h> int main() { unsigned int a=6; i ...

  9. ABAP语言实现 左移 <<、无符号右移 >>> 位移操作

    这几天要在ABAP中实现 3DES 标准对称加密算法,与其他外部系统进行加密/解密操作.由于ABAP语言中没有 左移 <<.无符号右移 >>>  操作,只能自己实现 思路 ...

随机推荐

  1. vue本地和线上环境(域名)配置

    vue本身为运行脚手架项目自家搭载了一个nodejs后台环境,本地可通过proxyTable来处理跨域问题,但是上线(或生产环境)之后改域名真是一件麻烦的事情,所以进行一些配置. config/ind ...

  2. dedecms无法下载远程jpeg图片 织梦不能提取文章内容中的jpeg图片生成缩略图

    文件:/dede/inc/inc_archives_functions.php 代码: preg_match_all("/(src)=[\"|'| ]{0,}([^>]*\. ...

  3. C++ 0x

  4. SpringCloud的学习记录(1)

    最近一段时间重新学习一边SpringCloud(有半年不用了),这里简单记录一下. 我用的是IntelliJ IDEA开发工具, SpringBoot的版本是2.1.3.RELEASE. 1. 构建M ...

  5. Python3爬虫04(其他例子,如处理获取网页的内容)

    #!/usr/bin/env python# -*- coding:utf-8 -*- import osimport reimport requestsfrom bs4 import Navigab ...

  6. 用SQL将数字转换为中文数字

    IF OBJECT_ID('fn_GetChnNum') IS NOT NULL BEGIN DROP FUNCTION dbo.fn_GetChnNum; END; GO CREATE FUNCTI ...

  7. java核心-流基础

    1.流的概念: 1.1输入流:向内存中写入数据 1.2输出流:有内存向指定的地方输出数据 2.

  8. php 调用微信虚拟支付

    摘要:小游戏对接微信虚拟支付,需要自己的后台调用微信的虚拟支付接口,微信的文档实在烂,总结走过的坑. 1.报错{errcode:90007,errmsg:invalid openid} 无效的open ...

  9. SIP MGCP和H323的区别

    在Windows中内置的NetMeeting就是典型的H.323协议客户端,而比较常见的SIP系统是微软开发的MSN Messenger系统.首先,由用户A向SIP服务器发出呼叫请求,请求的信息包含自 ...

  10. (python)剑指Offer:数组中重复的数字

    问题描述 在长度为n的数组中,所有的元素都是0到n-1的范围内. 数组中的某些数字是重复的,但不知道有几个重复的数字,也不知道重复了几次,请找出任意重复的数字. 例如,输入长度为7的数组{2,3,1, ...