对于一个字节来说:

unsigned char :     0  ~  255              0000 0000  ~ 1111 1111

char :-128  ~  127              -128  ~  -1     1000 0000  ~ 1111 1111                     0  ~  127     0000 0000  ~   0111 1111

(-128 的补码是1000 0000,它没有对应的原码、反码,其推导是根据 -128 + 127 = -1,即1000 0000 + 0111 1111 = 1111 1111)

计算机CPU只有加法逻辑运算器,对于减法运算,是使用两个数的补码进行加法运算。

 #include "stdafx.h"
#include <stdio.h> void print_2(unsigned char val2)
{
unsigned char *p = (unsigned char*)&val2; //从低位到高位,低端字节计算机 for (int i = ; i >= ; i--)
{
if(val2 & ( << i))
printf("");
else
printf("");
}
printf(" "); } int main(int argc, char **argv)
{
unsigned char a = ; //补码:0000 0001
unsigned char b = ; //补码:0000 0010
unsigned char c = a - b; //补码:0000 0001 + (-2)1111 1110 = (-1)1111 1111 printf("%02x,%02x,%02x\n", a, b, c);
printf("%d,%d,%d\n", a, b, c);
print_2(a);
print_2(b);
print_2(c); char d = a - b;
printf("\n%d\n", d); getchar();
}

内存中的数据结果是 1111 1111 ,如果按照unsigned char 解释即为255,按照char 解释则为 -1。

计算机补码概念剖析

unsigned char 无符号整形 减法运算的更多相关文章

  1. iOS NSArray 的count方法返回的是无符号整形!

    ){ return cell; } 这样写是错误的!!!当数组为空时,由于count方法返回的是无符号整形,没有负数,self.requests.count -1是一个非常大的正数! 正确写法: &g ...

  2. 利用Java位运算符,完成Unsigned转换(无符号)

    方案二:利用Java位运算符,完成Unsigned转换. 正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码: publi ...

  3. c#中将IP地址转换成无符号整形数的方法与逆变换方法

    我们知道 IP地址就是给每个连接在Internet上的主机分配的一个32bit地址. 按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节.而c#中 ...

  4. Integral Promotions整数提升和符号扩展(char,unsigned char,signed char)

    以下来自msdn: Objects of an integral type can be converted to another wider integral type (that is, a ty ...

  5. MySQL学习----unsigned 无符号的总结

    unsigned    为“无符号”的意思,          unsigned,zerofill    既为非负数,用此类型可以增加数据长度,      例如如果    int最大是65535,那  ...

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

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

  7. C++ char, unsigned char, signed char

    C语言中的 char, unsigned char, signed char 一.他们是什么? signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8 ...

  8. c语言中 char* 和 unsigned char* 的区别浅析(转)

    原文:https://blog.csdn.net/guotianqing/article/details/77341657 背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用 ...

  9. char 与 unsigned char的本质区别

    在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...

随机推荐

  1. CPU和GPU实现julia

    CPU和GPU实现julia           主要目的是通过对比,学习研究如何编写CUDA程序.julia的算法还是有一定难度的,但不是重点.由于GPU实现了也是做图像识别程序,所以缺省的就是和O ...

  2. Python_cmd的各种实现方法及优劣(subprocess.Popen, os.system和commands.getstatusoutput)

    http://blog.csdn.net/menglei8625/article/details/7494094

  3. 解决CentOS下man 命令,没有帮助信息

    Cannot open the message catalog "man" for locale "zh_CN.UTF-8" (NLSPATH="/u ...

  4. Mysql-学习笔记(==》集合函数与分组四)

    -- 聚集函数 配合分组语句 group by-- 显示最高分SELECT MAX(sscore) FROM db.`student`;-- 显示最高分学生的信息min maxSELECT * FRO ...

  5. js监控窗口高度和宽度

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/T ...

  6. nn

    <li> <a href="#" class="dropdown-toggle"> <i class="icon-des ...

  7. Objective-C协议与非正式协议

    http://blog.csdn.net/siemenliu/article/details/7836499

  8. VC++实现在系统托盘来新消息闪烁,鼠标悬停显示窗口

    转载:http://www.codeguru.com/cpp/com-tech/activex/tutorials/article.php/c8115/How-to-Implement-a-Mouse ...

  9. percona-toolkit工具包的使用教程之开发类工具

    percona-toolkit工具包的使用教程之开发类工具 1.  pt-duplicate-key-checker l  功能介绍: 功能为从mysql表中找出重复的索引和外键,这个工具会将重复的索 ...

  10. BZOJ 2661 连连看(费用流)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2661 题意:给出一个区间[a,b]中的全部整数,如果其中某两个数x,y(设x>y) ...