从1的补码说起计算机的数制

本文介绍了计算机中数的表示方式,从1的补码开始,探讨了字节、半字、字和双字的概念,以及不同位宽的数值范围。同时,讲解了补码的计算过程,强调了16位和32位编译器下数据类型的字节数差异,并列举了各种进制转换和常数表示的规则。
摘要由CSDN通过智能技术生成

字节换算

bit(b)=位

字节(byte)=8位 -128~127 0~255

半字=2字节=16位 -32768~32767 0~65,535

字(word)=4字节=32位 -2147483848~2147483647 0~4,294,967,295

双字=8字节=64位 -9223372036854775808~9223372036854775807 0~18,446,744,073,709,551,615

十进制-1的二进制表示

在IA-32平台使用补码表示带符号的整数

反码:无符号整数相反代码1->0;0->1。

补码:反码+1

过程

在一个字节中1

二进制是0000 0001

反码 1111 1110

补码 1111 1111 即-1

补码从1111 1111 开始递减直到1000 0000表示-128

一个 16位的1的二进制是

0000 0000 0000 0001

补码即-1是

1111 1111 1111 1111

注意不要把8位的1111 1111即-1和15位的1111 1111 1111 1111即-1混淆!同时16位中1111 1111是255

16位编译器和32位编译器

16位下int 2个字节 long 4个字节 short 2个字节

32位下int4个字节 long 4个字节 short 2个字节

64位下int4个字节 long 8个字节 short 2个字节

printf( "size of \"short\" =%lu\n", sizeof(short));    
printf( "size of \"char\" =%lu\n", sizeof(char));    
printf( "size of \"long\" =%lu\n", sizeof(long));    
printf( "size of \"double\" =%lu\n", sizeof(double));    
printf( "size of \"int\" =%lu\n", sizeof(int));    
printf( "bit of \"int\" =%lu\n", sizeof(int)*8);

32位和64位下输出比较

各种常数 规则 范例
十进制 一般十进制格式 1234
二进制 以0b开头 0b00111010
八进制 以O开头 O056
十六进制 以开0x头 0x56ab
无正负号整数常数 结尾加上U 300U
长整数常数 结尾加上L 300L
无正负号整数常数 结尾加上UL 300UL
浮点数常数 结尾加上F 4.32F
字符常数 单引号中的文字 ‘a’
字符串常数 双引号中的文字 “hello”

int和Long等的最大最小值MAX和MIN可以参考 limits.h

#whereis limits.h

limits: /usr/include/limits.h

 

<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值