参考 1. 关于 -128 ,+128,-0,+0,-1 的反码补码 | 博客园 2. 八位二进制数为什么表示范围(-128~~+127)理解 | 博客园 无符号单字节范围 无符号单字节unsigned char位宽是8bit,范围[0, 1111 1111b],也就是[0, 255]. 有符号单字节范围 有符号单字节signed char位宽也是8bit,绝对值范围也是[0, 1111 1111b],不过最高位表示符号位,能表示的范围是多少呢? 不得不考虑一个特殊情况,0加符号位可表示+0,-…
转载于daiyutage 在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1   n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即    -2147483648~2147483647,但是为什么最小负数绝对值总比最大正数多1…
http://blog.csdn.net/daiyutage/article/details/8575248 在C语言中, signed char 类型的范围为-128~127,每本教科书上也这么写,但是没有哪一本书上(包括老师)也不会给你为什么是-128~127,这个问题貌似看起来也很简单容易, 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1   n为整型的内存占用位数,所以int类型32位 那么就是 -(2^31)~2^31 -1 即 -2147…
在 C 语言中. signed char 类型的范围为 -128~127,每本教科书上也这么写.可是没有哪一本书上(包含老师)也不会给你为什么是 -128~127,这个问题貌似看起来也非常easyeasy. 以至于不用去思考为什么,不是有一个整型范围的公式吗:  -2^(n-1)~2^(n-1)-1 (n为整型的内存占用位数).所以 int 类型 32 位那么就是 -(2^31) ~ 2^31-1 即 -2147483648~2147483647,可是为什么最小负数绝对值总比最大正数多 1 .这…
问:为什么有符号的char可表示范围是-128~+127? 要明白这个问题,首先要明白一下几点: 对于char和int计算机中以补码形式存在. 严格来说计算机就是傻逼,它只知道某个位上是0还是1. 我们人为告诉计算机一个规则:要是这8个位最高位是0,那么你这8个位中存储的是一个正数:要是这8个位最高位是1,那么你这8个位中存储的就是一个负数. 我们又告诉计算机一个规则:你这个傻逼,你里面存储的补码是个什么东西,我看不懂,你要人性化一点,把这个东西给我弄成源码,要是用十进制显示出来那最好了,于是你…
一个字节是8位,最高位是符号位,最高位为0则是正数.最高位为1则是负数 如果一个数是正数,最大数则为:01111111,转为十进制为127, 如果一个数是负数,按照一般人都会觉得是11111111,转为十进制为-127, 但是:一个+0表示为:00000000,一个-0表示为:1000000,因为符号位不算在里面,所以就会有两个0,所以从一开始发明二进制的时候,就把-0规定为-128,如此二进制的补码就刚好在计算机中运作中吻合.(这是国内教材中的解释) 公式:计算一个数据类型的数据大小范围:-2…
ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.而不是像short.int一样只有两种(int默认就是signed int). 三者都占1个字节(1 byte),因此: signed char取值范围是 -128 到 127(有符号位)unsigned char 取值范围是 0 到 255 这个大家都很清楚!! 但是char 呢?范围是多少? 答案是:不一定!!! 我们先看一下大师们怎么说的: (Thinking in C++ 2nd): s…
ANSI C 提供了3种字符类型,分别是char.signed char.unsigned char.char相当于signed char或者unsigned char,但是这取决于编译器!这三种字符类型都是按照1个字节存储的,可以保存256个不同的值.不同的是取值范围.signed char取值范围是 -128 到 127,unsigned char 取值范围是 0 到 255.signed char的最高位为符号位,因此char能表示-128~127, unsigned char没有符号位,…
突然间就想到了long和int到底什么区别(发现有很多问题都是突然间想到的),然后百度.google各种查找,各种书籍:<C++ Primer>.<C程序设计语言>查看,终于明白了一些.下面的话选自<C程序设计语言>: short与long两个限定符的引入可以为我们提供满足实际需要的不同长度的整形数.int通常代表特定机器中证书的自然长度.short类型通常为16位,long类型通常为32位,int类型可以为16位或32位.各编译器可以根据硬件特性自主选择合适的类型长度…
C 中 char.signed char 和 unsigned char 的区别 来源:http://bbs.chinaunix.net/thread-889260-1-1.html 参考:https://publications.gbdirect.co.uk//c_book/chapter2/integral_types.html ANSI C 提供了3种字符类型,分别是char.signed char.unsigned charchar相当于signed char或者unsigned cha…
遇到一个问题,在使用一个算法的时候出现了仿真正常,但是在使用时出现函数的返回数据只有正值的异常. 在定位算法问题的时候,由算法函数最后的返回值由后向前推,最后发现问题在与char类型的值在不同编译器下定义的问题. 在char.signed char.unsigned char中char相当于signed char或者unsigned char,取决于当前的编译器 其中: signed char取值范围是 -128 到 127unsigned char 取值范围是 0 到 255 所以char在不…
#include <stdio.h> //char类型数据范围 [-128,127] // ......-132 -131 -130 -129 -128 .. 127 128 129 130 131 132.... // ...... 124 125 126 127 -128 .. 127 -128 -127 -126 -125 -124.... int main() { ; ; ; ; printf("-131--%d,130--%d\n",t1,t2); int i;…
以下来自msdn: Objects of an integral type can be converted to another wider integral type (that is, a type that can represent a larger set of values). This widening type of conversion is called "integral promotion." With integral promotion, you can…
在C语言程序中,给定一个类型,如何计算这个类型变量的取值范围呢?比如有一个字符型变量定义如下: signed char c: 这个字符变量c的取值范围是[-128,127],是计算出来的呢? 假设字符型变量占用一个字节,也就是8bit.由于是"signed",也就是有符号的,也就是可以是正数,也可以是负数,那么8bit中的最高位就是表示符号位.符号位是"1",就表示是负数,符号位是"0",就表示是正数.先来看看符号位是"1"的…
转载地址:http://hi.baidu.com/thewillreigns/blog/item/67e665c4296e69c038db492d.html char 和 unsigned char是无符号的 两者都作为字符用的话是没有区别的,但当整数用时有区别:  char 整数范围为-128到127( 0x80__0x7F),  而unsigned char 整数范围为0到255( 0__0xFF ) 多数情况下,char ,signed char .unsigned char 类型的数据具…
C语言中的 char, unsigned char, signed char 一.他们是什么? signed char是有符号的,但是unsigned char没有符号,两者在存储上没有任何区别都是8位. 区别在于如何理解这两个byte,假设一种场景我们要将其赋值给一个int. 如果是signed char由于高位为符号位,那么会对最高位进行扩展,但是对于unsinged char不会进行扩展. 至于char是有符号还是无符号,要取决于具体的编译器. 二.三者的类型无法进行自动转换 假设我们使用…
# char 与 signed char 和 unsigned char三者之间的关系 三者都占用 1个字节,即 8 bit signed char取值范围(-128, 127) unsigned char取值范围(0, 255) 三个内存中存储的都是一样的东东,只是在运算时进行解析的方式不同 其如何解析和编译器有关.不同的编译器对char的解析不同,如将其定义为signed char的有: VC编译器 x86上的GCC 将其定义为unsigned char的有:arm-linux-gcc ch…
C语言的字节对齐及#pragma pack的使用   C编译器的缺省字节对齐方式(自然对界) 在缺省情况下,C编译器为每一个变量或是数据单元按其自然对界条件分配空间. 在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间.各个成员按照它们被声明的顺序在内存中顺序存储(成员之间可能有插入的空字节),第一个成员的地址和整个结构的地址相同. C编译器缺省的结构成员自然对界条件为“N字节对齐”,N即该成员数据类型的长度.如int型成员的自然对界条件为4字节对齐,而double类…
关于这三者的区别stackoverrflow里有一个答案是这样说的: 3.9.1 Fundamental types [basic.fundamental] 1 Objects declared as characters char) shall be large enough to store any member of the implementation's basic character set. If a character from this set is stored in a c…
什么是无符号char类型?与常见的char类型有何不同? 在c++中有三种不同的字符类型:char,signed char,unsigned char.如果要应用与文本字符,就使用不加限制的char类型即可,比如:'a' 或者'0',"abdcddfd". char类型也可以被当作数字类型值使用,但是这个值是有符号或是无符号的无法唯一确定下来.如果将字符限制在ascii范围内,比较字符这样的行为是安全的.signed char范围-128~127.unsigned char范围为0~2…
signed char型内存 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e 9f a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 ca cb cc cd c…
C语言scanf与get char,gets的区别 1.scanf() scanf是C语言的格式输入函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息.可以读入任何固有类型的数据并自动把数值变换成适当的机内格式. 在这里我想 列下一个'格式化说明符'的表来自于下面这个链接 (https://blog.csdn.net/21aspnet/article/details/174326) (A)                格式化说明符 格式字符           说明 %a …
原文:http://lihaoquan.me/2016/11/5/golang-byteorder.html 这个人的博客写的不错,品质也比较高. 我应该也要有这种精神,这种态度.深入到计算机的世界中去.也是一种快乐. 使用Go开发一个简单反向代理服务 这篇文章也要研究一下.很好 --------------------------------------------------------------------------------------------- go语言的字节序 go 最近在…
看如下代码: char c = -1; signed char sc = -1; unsigned char uc = -1; printf("c=%d, sc=%d, uc=%d, cx=%x, scx=%x, ucx=%x\n, c, sc, uc, c, sc, uc); Windows平台下输出: c=-1,sc=-1,uc=255,cx=ffffffff,scx=ffffffff,ucx=ff 即char相当于signed char IMX6UL平台下输出: c=255,sc=-1,u…
https://stackoverflow.com/questions/31267325/bool-with-64-bit-on-ios/31270249#31270249 Definition of BOOL from objc.h: /// Type to represent a boolean value. #if (TARGET_OS_IPHONE && __LP64__) || TARGET_OS_WATCH #define OBJC_BOOL_IS_BOOL 1 typedef…
以前经常看到带符号的char类型取值范围是-128——127,今天突然想为什么不是-127——127,-128是怎么来的? 127好理解,char类型是8位,最高位是符号位,0正1负,所以01111111是127. 但是-128是怎么来的呢?11111111不是-127吗? 后来想起来计算机里面所有数都是用补码表示的,正数补码是其本身,负数补码是原码的反码加1. 所以-127是10000001,而10000000换算过来就是-128. 所以, 8位有符号的整数取值范围的补码表示 1000 000…
char 的取值范围是 -128 ~127 注:数0的补码表示是唯一的: +0的补码=+0的反码=+0的原码=00000000 -0的补码=11111111+1=00000000(mod 2的8次方) 由于-128的原码用8位无法表示,所以必须扩展到16位去表示,然后对16位的原码计算出16位的反码和补码,最后对16位的补码作低8位的截断,截断的低8位的值就是-128的补码了. // 8位所能表示的 原码 的范围-127到+127 // 8位所能表示的 反码 的范围-127到+127 // 8位…
在C语言编程中,有时为了达到减少运行的时间的目的,需要浪费一些空间:而有时为了节省空间,使它的运行时间增长.而字节对齐则是为了访问效率,用空间换取时间. 要掌握字节对齐,首先得明确一下四个概念: 1.基本数据类型的自身对齐值 在32位系统下基本数据类型有其自身的对齐值: char  1个字节 short  2个字节 Int    4个字节 double  8个字节 2.程序指定的对齐值 用#pragma(value)显式指定对齐值value 3.自定义类型的自身对齐值 即结构体或类的成员自身对齐…
数据对齐 1.  对齐原则: [原则1]数据成员对齐规则:结构(struct)(或联合(union))的数据成员,第一个数据成员放在offset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行. [原则2]结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后,结构(或联合)本身也要进行对齐,对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中,比较小的那个进行. [原则3]结构体作为成员:如果一个结构…
1. 什么是对齐? 现代计算机中内存空间都是按照字节(byte)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序地一个接一个地排放,这就是对齐. 2. 计算机为什么要对齐? 各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取,其他平台可能没有这种情况.但是最常见的是,如果不按照适合其平台的要求对数据存放进行对齐,会在存取…