¡¡¡¡Õâ¸öÎÊÌâ´óÖÂÊÇÕâÑùµÄ£¬±¾À´ÊÔͼдһ¸ö²úÉúµÍ8λΪ1µÄÑÚÂëµÄÓï¾ä£º uint32_t mask = ~((uint8_t)0); £¬½á¹û·¢ÏÖËã³öµÄÑÚÂëÊÇ 0xffffffff ÏÔÈ»²»·ûºÏÔ¤ÆÚ£¬ÓÚÊÇÕÛÌÚ¼ì²éÁËÒ»·¬£¬Ð´³ö¶Ô±È³ÌÐòÈçÏ£º
#include <stdint.h> #include <iostream> using namespace std; int main() { uint8_t z = 0; uint32_t x = ~(uint8_t)0; uint32_t y = (uint8_t)~0; cout << typeid(~(uint8_t)0).name() << endl; cout << typeid((uint8_t)~0).name() << endl; cout << x << endl; cout << y << endl; } |
¡¡¡¡³ÌÐòµÄÊä³ö(macOS, Clang)ÊÇ£º
¡¡¡¡i
¡¡¡¡h
¡¡¡¡4294967295
¡¡¡¡255
¡¡¡¡ËùÒÔºÜÏÔÈ»ÕâÁ½ÖÖд·¨Ö®¼äµÄϸ΢Çø±ð£¬µ¼ÖÂËù²úÉúµÄ½á¹û²¢²»Ïàͬ¡£Í¨¹ý typeid ÎÒÃÇ¿ÉÒÔ¿´µ½ÆäʵÕâÁ½¸ö±í´ïʽµÄÀàÐ;ÍÊDz»Í¬µÄ£¬ºóÕßµÄ h ÏÔÈ»ÊDZíʾ uint8_t £¬ÄÇôǰÕß¹À¼Æ¾ÍÊÇ int ÁË¡£ËùÒÔÄ¿²âÕâÀï¹À¼ÆÊǹ涨ÁËÒþʽÀàÐÍת»»Ö®ÀàµÄ£¬¹û¶ÏÈ¥·Ò»Ï C99 ±ê×¼£¬¹û²»ÆäÈ»£¬ 6.5 ½Ú¿ªÍ·¾Í¹æ¶¨ÈçÏ£º
¡¡¡¡È»ºóÔÚ 6.5.3.3 ÓÖÓÐÈçϽâÊÍ£º
¡¡¡¡ËùÒÔ£¬ÔÚÕâÀﰴλȡ·´ÔËËã·ûʵ¼ÊÉÏÊÇ¶Ô uint8_t ½øÐÐÁËÕûÐÍÌáÉý£¬È»ºóÈ¡·´µÄÔËËã½á¹ûÒ²ÊÇÕûÊýÀàÐ굀 -1 £¬µ±×ª»»ÎªÎÞ·ûºÅÕûÊýµÄʱºò×ÔÈ»¾Í»áµ¼ÖÂËùÓÐ bit ¶¼ÊÇ1£¬¶ø²»ÊÇÆÚÍûµÄÖ»ÓÐ×îµÍλһ¸ö×Ö½ÚΪ1ÁË¡£
¡¡¡¡×ܶøÑÔÖ®£¬ÓïÒåÀí½â²»ÇåÎú£¬¾Í¹û¶ÏÈ¥·ÏàÓ¦µÄspec°É¡£