大家好,欢迎来到IT知识分享网。
其实可以直接通过stm32的仿真看到结果:(这里是我用keil进行的测试,不知道这种方法是否准确)
从上面看, char是8位 short是4*4=16位 int是8*4=32位 long是8*4=32位
这里关于 long还是有点不清楚,不是道是不是64位,有的人说是64位(起码在stm32中,long是32位的不是64位的),
int 范围 -2^31——2^31-1,即-2147483648——2147483647 也就是10位数.
为了验证long是多少位,然后进行了程序运行:
通过上面程序输出来:
从上面结果来看,long真的是4*8=32位的.
如果设置: long long类型呢:
可以看到long long是正确的所以long long 应该是64位的
这个和编译器有关,
在stm32的keil中:
char 就是字节,占8位
short 就是 short int 占2个字节 2*8=16位
int 占4个字节 4*8 =32位
long 就是 long int 占8个字节 4*8=32位
正数的补码是它本身,
负数的补码是它本身的值每位求反,最后再加一.
如: -3
那么就要先看3,3的十六进制是0x0003
0x0003求反之后0xfffc
然后加一 0xfffc加一 为0xfffd
所以-3 表示为0xfffd
计算机中存储-3都是以补码形式存在的. 即存的是0xfffd
原码是给人看的
补码是计算机存储的
反码是中间产物
正数的补码等于原码.
负数的补码等于原码除去最高位,取反,加1
计算机为什么要用补码表示负数,
答案是为了方便计算
参看:https://www.cnblogs.com/starry-skys/p/11997091.html
https://www.cnblogs.com/starry-skys/p/11991906.html
https://blog.csdn.net/super_demo/article/details/50117449
这里比较详细:
http://news.eeworld.com.cn/mcu/ic459073.html
%dn
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/34064.html