C语言篇
- 有符号、无符号数据,都是数据的一种存储方式。 在编程中对他们负责的是编译器,编译器根据其数据类型将其编译为汇编(二进制)代码,有符号数据也将其表达方式为二进制补码形式
如:signed short a = -1, unsigned short b=1,则编译后为:
a:0xFFFF b: 0x0001.(按目前架构和编译设计是补码形式存储数据)
则:如果我们在编码时写出:a+b =? 则编译为汇编(二进制)后进行运算。则为0xffff + 0x0001 -> 溢出,可得:0x0000.这个结果和预期也相同,但是不正确的使用。
如果a=-8(0xfff8) b:2 (0x0002) ,则 a+b=0xfff8+0x0002=0xfffa
这是编译器为默认类型为unsiged short :则a+b=0xfffa = 65530
因此数据类型不可用用错。
2. 由1可知,编程时用二进制就是二进制,不需要关心其类型。
当将二进制赋值给有符号数据时:signed short a= (signed short)0x8001, 则编译后: a存储的数据应该为:0x8001.
则a的实际数据值应该为:-(0x7fff)。