unsigned char 无符号整形 减法运算
对于一个字节来说:
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 无符号整形 减法运算的更多相关文章
- iOS NSArray 的count方法返回的是无符号整形!
){ return cell; } 这样写是错误的!!!当数组为空时,由于count方法返回的是无符号整形,没有负数,self.requests.count -1是一个非常大的正数! 正确写法: &g ...
- 利用Java位运算符,完成Unsigned转换(无符号)
方案二:利用Java位运算符,完成Unsigned转换. 正常情况下,Java提供的数据类型是有符号signed类型的,可以通过位运算的方式得到它们相对应的无符号值,参见几个方法中的代码: publi ...
- c#中将IP地址转换成无符号整形数的方法与逆变换方法
我们知道 IP地址就是给每个连接在Internet上的主机分配的一个32bit地址. 按照TCP/IP协议规定,IP地址用二进制来表示,每个IP地址长32bit,比特换算成字节,就是4个字节.而c#中 ...
- 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 ...
- MySQL学习----unsigned 无符号的总结
unsigned 为“无符号”的意思, unsigned,zerofill 既为非负数,用此类型可以增加数据长度, 例如如果 int最大是65535,那 ...
- char类型到底是有符号还是无符号
根据c标准,char类型到底是有符号整数类型还是无符号整数类型,这取决于c实现,也就是c编译器的作者的想法:( 那么,如何快速的编写一个检测程序,查看当前编译器如何对char进行定义? #includ ...
- C++ char, unsigned char, signed char
C语言中的 char, unsigned char, signed char 一.他们是什么? signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8 ...
- c语言中 char* 和 unsigned char* 的区别浅析(转)
原文:https://blog.csdn.net/guotianqing/article/details/77341657 背景最近在项目中遇到了一个编译警告,是因为定义的变量为char[],而在使用 ...
- char 与 unsigned char的本质区别
在C中,默认的基础数据类型均为signed,现在我们以char为例,说明(signed) char与unsigned char之间的区别 首先在内存中,char与unsigned char没有什么不同 ...
随机推荐
- vim标准操作
主要技巧: ->普通模式负责所有光标定位能力.插入模式随时使用<esc>键回到普通模式并且尽量保持普通模式为主要的工作状态. -> hjkl四键负责光标的低速移动,如果还在使用 ...
- Accepted Necklace
Accepted Necklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- Moo University - Financial Aid
Moo University - Financial Aid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6020 Accep ...
- Codeforces Round #366 (Div. 2) B
Description Peter Parker wants to play a game with Dr. Octopus. The game is about cycles. Cycle is a ...
- ThreadLocal实现线程范围内共享
线程范围内共享,即是对相同一段代码,在不同的模块调用时使用一份数据,而在另外一个线程中又使用另外一份数据. ThreadLocal使用set方法为一个新的线程增加一条记录,key是各自的线程,valu ...
- 六、IO流——文件
IO流1.字节流(InputStream.OutputStream)2.字符流 (Reader.Writer)3.缓冲流(BufferedInputStream.BufferedOutputStrea ...
- Cheatsheet: 2013 10.01 ~ 10.08
Other 20 Tips for becoming a better programmer Top 10 Movies for Programmers .NET RaptorDB - The Key ...
- GBrowse配置相关资料
GBrowse配置相关资料(形状.颜色.配置.gff3) http://gmod.org/wiki/Glyphs_and_Glyph_Optionshttp://gmod.org/wiki/GBrow ...
- [SAP ABAP开发技术总结]将文件存储到数据库表中,并可发送邮件
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 多线程技术在iOS开发中的使用
进程和线程 要使用多线程,首先需要理解进程和线程这2个概念.这里我简单的说一下. 所谓进程对应的是一个应用程序,负责开辟内存空间供应用程序使用,但是进程不能执行任务(指令).一个进程至少包含一条线程, ...