从1的补码说起计算机的数制
来源:互联网 发布:汽车防盗芯片编程器 编辑:程序博客网 时间:2024/05/17 04:04
字节换算
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);
各种常数 规则 范例
十进制 一般十进制格式 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
32位下的
limits.h
/* *ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types<limits.h> */#ifndef _LIBC_LIMITS_H_#define _LIBC_LIMITS_H_1#include <features.h>/* Maximum length of any multibyte character in any locale. We define this value here since the gcc header does not define the correct value. */#define MB_LEN_MAX16/* If we are not using GNU CC we have to define all the symbols ourself. Otherwise use gcc's definitions (see below). */#if !defined __GNUC__ || __GNUC__ < 2/* We only protect from multiple inclusion here, because all the other #include's protect themselves, and in GCC 2 we may #include_next through multiple copies of this file before we get to GCC's. */# ifndef _LIMITS_H# define _LIMITS_H1#include <bits/wordsize.h>/* We don't have #include_next. Define ANSI <limits.h> for standard 32-bit words. *//* These assume 8-bit `char's, 16-bit `short int's, and 32-bit `int's and `long int's. *//* Number of bits in a `char'.*/# define CHAR_BIT8/* Minimum and maximum values a `signed char' can hold. */# define SCHAR_MIN(-128)# define SCHAR_MAX127/* Maximum value an `unsigned char' can hold. (Minimum is 0.) */# define UCHAR_MAX255/* Minimum and maximum values a `char' can hold. */# ifdef __CHAR_UNSIGNED__# define CHAR_MIN0# define CHAR_MAXUCHAR_MAX# else# define CHAR_MINSCHAR_MIN# define CHAR_MAXSCHAR_MAX# endif/* Minimum and maximum values a `signed short int' can hold. */# define SHRT_MIN(-32768)# define SHRT_MAX32767/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */# define USHRT_MAX65535/* Minimum and maximum values a `signed int' can hold. */# define INT_MIN(-INT_MAX - 1)# define INT_MAX2147483647/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */# define UINT_MAX4294967295U/* Minimum and maximum values a `signed long int' can hold. */# if __WORDSIZE == 64# define LONG_MAX9223372036854775807L# else# define LONG_MAX2147483647L# endif# define LONG_MIN(-LONG_MAX - 1L)/* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */# if __WORDSIZE == 64# define ULONG_MAX18446744073709551615UL# else# define ULONG_MAX4294967295UL# endif# ifdef __USE_ISOC99/* Minimum and maximum values a `signed long long int' can hold. */# define LLONG_MAX9223372036854775807LL# define LLONG_MIN(-LLONG_MAX - 1LL)/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */# define ULLONG_MAX18446744073709551615ULL# endif /* ISO C99 */# endif/* limits.h */#endif/* GCC 2. */#endif/* !_LIBC_LIMITS_H_ */ /* Get the compiler's limits.h, which defines almost all the ISO constants. We put this #include_next outside the double inclusion check because it should be possible to include this file more than once and still get the definitions from gcc's header. */#if defined __GNUC__ && !defined _GCC_LIMITS_H_/* `_GCC_LIMITS_H_' is what GCC's file defines. */# include_next <limits.h>#endif/* The <limits.h> files in some gcc versions don't define LLONG_MIN, LLONG_MAX, and ULLONG_MAX. Instead only the values gcc defined for ages are available. */#if defined __USE_ISOC99 && defined __GNUC__# ifndef LLONG_MIN# define LLONG_MIN(-LLONG_MAX-1)# endif# ifndef LLONG_MAX# define LLONG_MAX__LONG_LONG_MAX__# endif# ifndef ULLONG_MAX# define ULLONG_MAX(LLONG_MAX * 2ULL + 1)# endif#endif#ifdef__USE_POSIX/* POSIX adds things to <limits.h>. */# include <bits/posix1_lim.h>#endif#ifdef__USE_POSIX2# include <bits/posix2_lim.h>#endif#ifdef__USE_XOPEN# include <bits/xopen_lim.h>#endif
64位下的
limits.h
/* *ISO C99 Standard: 7.10/5.2.4.2.1 Sizes of integer types<limits.h> */#ifndef _LIBC_LIMITS_H_#define _LIBC_LIMITS_H_1#include <features.h>/* Maximum length of any multibyte character in any locale. We define this value here since the gcc header does not define the correct value. */#define MB_LEN_MAX16/* If we are not using GNU CC we have to define all the symbols ourself. Otherwise use gcc's definitions (see below). */#if !defined __GNUC__ || __GNUC__ < 2/* We only protect from multiple inclusion here, because all the other #include's protect themselves, and in GCC 2 we may #include_next through multiple copies of this file before we get to GCC's. */# ifndef _LIMITS_H# define _LIMITS_H1#include <bits/wordsize.h>/* We don't have #include_next. Define ANSI <limits.h> for standard 32-bit words. *//* These assume 8-bit `char's, 16-bit `short int's, and 32-bit `int's and `long int's. *//* Number of bits in a `char'.*/# define CHAR_BIT8/* Minimum and maximum values a `signed char' can hold. */# define SCHAR_MIN(-128)# define SCHAR_MAX127/* Maximum value an `unsigned char' can hold. (Minimum is 0.) */# define UCHAR_MAX255/* Minimum and maximum values a `char' can hold. */# ifdef __CHAR_UNSIGNED__# define CHAR_MIN0# define CHAR_MAXUCHAR_MAX# else# define CHAR_MINSCHAR_MIN# define CHAR_MAXSCHAR_MAX# endif/* Minimum and maximum values a `signed short int' can hold. */# define SHRT_MIN(-32768)# define SHRT_MAX32767/* Maximum value an `unsigned short int' can hold. (Minimum is 0.) */# define USHRT_MAX65535/* Minimum and maximum values a `signed int' can hold. */# define INT_MIN(-INT_MAX - 1)# define INT_MAX2147483647/* Maximum value an `unsigned int' can hold. (Minimum is 0.) */# define UINT_MAX4294967295U/* Minimum and maximum values a `signed long int' can hold. */# if __WORDSIZE == 64# define LONG_MAX9223372036854775807L# else# define LONG_MAX2147483647L# endif# define LONG_MIN(-LONG_MAX - 1L)/* Maximum value an `unsigned long int' can hold. (Minimum is 0.) */# if __WORDSIZE == 64# define ULONG_MAX18446744073709551615UL# else# define ULONG_MAX4294967295UL# endif# ifdef __USE_ISOC99/* Minimum and maximum values a `signed long long int' can hold. */# define LLONG_MAX9223372036854775807LL# define LLONG_MIN(-LLONG_MAX - 1LL)/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */# define ULLONG_MAX18446744073709551615ULL# endif /* ISO C99 */# endif/* limits.h */#endif/* GCC 2. */#endif/* !_LIBC_LIMITS_H_ */ /* Get the compiler's limits.h, which defines almost all the ISO constants. We put this #include_next outside the double inclusion check because it should be possible to include this file more than once and still get the definitions from gcc's header. */#if defined __GNUC__ && !defined _GCC_LIMITS_H_/* `_GCC_LIMITS_H_' is what GCC's file defines. */# include_next <limits.h>#endif/* The <limits.h> files in some gcc versions don't define LLONG_MIN, LLONG_MAX, and ULLONG_MAX. Instead only the values gcc defined for ages are available. */#if defined __USE_ISOC99 && defined __GNUC__# ifndef LLONG_MIN# define LLONG_MIN(-LLONG_MAX-1)# endif# ifndef LLONG_MAX# define LLONG_MAX__LONG_LONG_MAX__# endif# ifndef ULLONG_MAX# define ULLONG_MAX(LLONG_MAX * 2ULL + 1)# endif#endif#ifdef__USE_POSIX/* POSIX adds things to <limits.h>. */# include <bits/posix1_lim.h>#endif#ifdef__USE_POSIX2# include <bits/posix2_lim.h>#endif#ifdef__USE_XOPEN# include <bits/xopen_lim.h>#endif
- 从1的补码说起计算机的数制
- 公共场合计算机的使用,从汉城机场的休息室说起
- 公共场合计算机的使用,从汉城机场的休息室说起
- 公共场合计算机的使用,从汉城机场的休息室说起
- 公共场合计算机的使用,从汉城机场的休息室说起
- 计算机常用的数制及编码
- 计算机的补码和反码
- 计算机的补码和移码
- 计算机使用补码的原理
- 从普林斯顿的宽容说起
- 从北京的四合院说起
- 从js的dtree说起
- 从香蕉的果蝇说起
- 从 grep 的用法说起
- 从自己的电脑说起
- 从OpenCV2的Mat说起
- 从Java的Collection说起
- 计算机基础之为什么要有补码运算及反码加1得补码的原理
- 段地址和偏移地址
- Linux下用Socket检测设备的挂载(实现设备的自动挂载)
- c语言复习大坑,作业:身份证校验
- 二叉树创建&判断是否有序二叉树&树的深度
- VirtualBox安装64位Linux
- 从1的补码说起计算机的数制
- 常用的C函数
- Linux下编译boost库生成 libboost_thread-mt.a 的方法
- 【Android--推荐】android中使用很多大图片的一些做法
- 学习博客汇总
- NavigateUr l动态参数 格式化参数
- unity3d Ngui UIFilledSprite(CD倒计时)
- js设置cookie
- Struts2 的 struts.xml 配置中 namespace 的使用